Skip to content
preview.py 3.04 KiB
Newer Older
Dalai Felinto's avatar
Dalai Felinto committed
"""
Viewport Preview Drawing
************************

Routines to draw in the viewport the result
that is projected in the HMD
"""

from .opengl_helper import (
        view_reset,
        view_setup,
        )

from bgl import *

TODO = True

Dalai Felinto's avatar
Dalai Felinto committed
class Preview:
    __slots__ = {
            "_color_object_left",
            "_color_object_right",
    def init(self, color_object_left, color_object_right):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Initialize preview window

        :param color_object_left: 2D Texture binding ID (bind to the Framebuffer Object) for left eye
        :type color_object_left: bgl.GLuint
        :param color_object_right: 2D Texture binding ID (bind to the Framebuffer Object) for right eye
        :type color_object_right: bgl.GLuint
Dalai Felinto's avatar
Dalai Felinto committed
        """
        self.update(color_object_left, color_object_right)
Dalai Felinto's avatar
Dalai Felinto committed

    def quit(self):
        """
        Destroy preview window
        """
Dalai Felinto's avatar
Dalai Felinto committed

    def update(self, color_object_left, color_object_right):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Update OpenGL binding textures
Dalai Felinto's avatar
Dalai Felinto committed

        :param color_object_left: 2D Texture binding ID (bind to the Framebuffer Object) for left eye
        :type color_object_left: bgl.GLuint
        :param color_object_right: 2D Texture binding ID (bind to the Framebuffer Object) for right eye
        :type color_object_right: bgl.GLuint
Dalai Felinto's avatar
Dalai Felinto committed
        """
        self._color_object_left = color_object_left
        self._color_object_right = color_object_right


    def _drawRectangle(self, eye):
        texco = [(1, 1), (0, 1), (0, 0), (1,0)]
        verco = [[(0.0, 1.0), (-1.0, 1.0), (-1.0, -1.0), ( 0.0, -1.0)],
                 [(1.0, 1.0), ( 0.0, 1.0), ( 0.0, -1.0), ( 1.0, -1.0)]]

        glPolygonMode(GL_FRONT_AND_BACK , GL_FILL)

        glColor4f(1.0, 1.0, 1.0, 0.0)

        glBegin(GL_QUADS)
        for i in range(4):
            glTexCoord3f(texco[i][0], texco[i][1], 0.0)
            glVertex2f(verco[eye][i][0], verco[eye][i][1])
        glEnd()
Dalai Felinto's avatar
Dalai Felinto committed

    def loop(self, scale):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Draw in the preview window
        """
Dalai Felinto's avatar
Dalai Felinto committed
        act_tex = Buffer(GL_INT, 1)
        glGetIntegerv(GL_TEXTURE_2D, act_tex)
Dalai Felinto's avatar
Dalai Felinto committed

        if scale != 100:
            viewport = Buffer(GL_INT, 4)
            glGetIntegerv(GL_VIEWPORT, viewport)
Dalai Felinto's avatar
Dalai Felinto committed

            width = int(scale * 0.01 * viewport[2])
            height = int(scale * 0.01 * viewport[3])
            glViewport(viewport[0], viewport[1], width, height)
            glScissor(viewport[0], viewport[1], width, height)
Dalai Felinto's avatar
Dalai Felinto committed

Dalai Felinto's avatar
Dalai Felinto committed
        glDisable(GL_DEPTH_TEST)
Dalai Felinto's avatar
Dalai Felinto committed

        view_setup()

        glEnable(GL_TEXTURE_2D)
        glActiveTexture(GL_TEXTURE0)

        glBindTexture(GL_TEXTURE_2D, self._color_object_left)
        self._drawRectangle(0)

        glBindTexture(GL_TEXTURE_2D, self._color_object_right)
        self._drawRectangle(1)
Dalai Felinto's avatar
Dalai Felinto committed

        glBindTexture(GL_TEXTURE_2D, act_tex[0])

        glDisable(GL_TEXTURE_2D)

Dalai Felinto's avatar
Dalai Felinto committed

        if scale != 100:
            glViewport(viewport[0], viewport[1], viewport[2], viewport[3])
            glScissor(viewport[0], viewport[1], viewport[2], viewport[3])
Dalai Felinto's avatar
Dalai Felinto committed