Skip to content
preview.py 1.99 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 (
        draw_rectangle,
        view_reset,
        view_setup,
        )

from bgl import *

TODO = True

Dalai Felinto's avatar
Dalai Felinto committed
class Preview:
    __slots__ = {
            "_texture",
            }

    def init(self, texture):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Initialize preview window

Dalai Felinto's avatar
Dalai Felinto committed
        :param texture: 2D Texture binding ID (bind to the Framebuffer Object)
        :type texture: bgl.GLint
Dalai Felinto's avatar
Dalai Felinto committed
        """
        self.update(texture)
Dalai Felinto's avatar
Dalai Felinto committed

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

    def update(self, texture):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Resize preview window

Dalai Felinto's avatar
Dalai Felinto committed
        :param texture: 2D Texture binding ID (bind to the Framebuffer Object)
        :type texture: bgl.GLint
Dalai Felinto's avatar
Dalai Felinto committed
        """
Dalai Felinto's avatar
Dalai Felinto committed
        self._texture = texture
Dalai Felinto's avatar
Dalai Felinto committed

    def loop(self, scale):
Dalai Felinto's avatar
Dalai Felinto committed
        """
        Draw in the preview window
        """
        texture = self._texture
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

            glEnable(GL_DEPTH_TEST)
            glDepthFunc(GL_LESS)
Dalai Felinto's avatar
Dalai Felinto committed

        view_setup()

        glEnable(GL_TEXTURE_2D)
        glActiveTexture(GL_TEXTURE0)
        glBindTexture(GL_TEXTURE_2D, texture)

        draw_rectangle()

        glBindTexture(GL_TEXTURE_2D, act_tex[0])

        glDisable(GL_TEXTURE_2D)
        glDisable(GL_DEPTH_TEST)

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