Commit a499cd4b authored by Dalai Felinto's avatar Dalai Felinto
Browse files

shader changes to identify the current eye, and render accordingly (requires...

shader changes to identify the current eye, and render accordingly (requires patched blender - http://www.pasteall.org/57722)
parent 689afa9d
Loading
Loading
Loading
Loading
+5 −2
Changes for space_view3d_virtual_reality/__init__.py: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -136,8 +136,6 @@ class VirtualRealityViewportOperator(bpy.types.Operator):
            space.show_only_render = True
            space.stereo_3d_camera = 'S3D'

            #bpy.v3d = get_context_3dview(context)
            #bpy.space = space
            bpy.ops.view3d.viewnumpad(type='CAMERA')

            self._timer = context.window_manager.event_timer_add(0.1, context.window)
@@ -180,6 +178,11 @@ class VirtualRealityViewportOperator(bpy.types.Operator):
        if self.color_id:
            delete_image(self.color_id)

    def is_stereo_left(self, context):
        """"""
        space = get_space_3dview(context)
        return space.stereo_3d_eye == 'LEFT'


def register():
    bpy.utils.register_module(__name__)
+6 −0
Changes for space_view3d_virtual_reality/oculus_dk2.glsl: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
uniform sampler2D bgl_RenderedTexture;
uniform float bgl_RenderedTextureWidth;
uniform float bgl_RenderedTextureHeight;
uniform float bgl_RenderedStereoEye;

const vec4 kappa = vec4(1.0,0.7,1.0,1.0);

@@ -44,6 +45,11 @@ void main()
    vec2 ScaleIn = vec2(2.0 * scaleFactor, 1.0 / as * scaleFactor);

    vec2 texCoord = (gl_TexCoord[0].st);
    texCoord.x *= 0.5;

    if (bgl_RenderedStereoEye > 0.1)
        texCoord.x += 0.5;

    vec2 texCoordSeparated = texCoord;

    vec2 tcR = vec2(0.0);
+7 −2
Changes for space_view3d_virtual_reality/opengl_helper.py: 7 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ def create_shader(source, program=None, type=GL_FRAGMENT_SHADER):
    return program


def setup_uniforms(program, color_id, width, height):
def setup_uniforms(program, color_id, width, height, is_left):
    """"""
    uniform = glGetUniformLocation(program, "bgl_RenderedTexture")
    glActiveTexture(GL_TEXTURE0)
@@ -182,6 +182,9 @@ def setup_uniforms(program, color_id, width, height):
    uniform = glGetUniformLocation(program, "bgl_RenderedTextureHeight")
    if uniform != -1: glUniform1f(uniform, height)

    uniform = glGetUniformLocation(program, "bgl_RenderedStereoEye")
    if uniform != -1: glUniform1f(uniform, 0 if is_left else 1)

def bindcode(image):
    """load the image in the graphic card if necessary"""
    image.gl_touch(GL_NEAREST)
@@ -240,6 +243,8 @@ def draw_callback_px(self, context):
    """core function"""
    if not self._enabled: return

    is_left = self.is_stereo_left(context)

    act_tex = Buffer(GL_INT, 1)
    glGetIntegerv(GL_ACTIVE_TEXTURE, act_tex)

@@ -273,7 +278,7 @@ def draw_callback_px(self, context):
    modelviewprojinv_mat = Buffer(GL_FLOAT, (4,4), modelviewprojinv_matrix.transposed())

    glUseProgram(self.program_shader)
    setup_uniforms(self.program_shader, self.color_id, self.width, self.height)
    setup_uniforms(self.program_shader, self.color_id, self.width, self.height, is_left)
    draw_rectangle()

    # (4) restore opengl defaults