Skip to content
__init__.py 3.66 KiB
Newer Older
Dalai Felinto's avatar
Dalai Felinto committed

TODO = True

from mathutils import (
        Matrix,
        Vector,
        )

Dalai Felinto's avatar
Dalai Felinto committed

# ############################################################
# Data structs
# ############################################################

def HMD(display_backend):
    """
    return the head mounted display device class
    (defined in another file)

    :param display_backend: asdasd
    :type display_backend: str
    """
    from .oculus import Oculus
    from .debug import Debug

    displays = {
            'OCULUS':Oculus,
            'DEBUG':Debug,
            }

    if display_backend not in displays:
        assert False, "Display Backend \"{0}\" not implemented".format(display_backend)

    return displays[display_backend]()


# ############################################################
# Data structs
# ############################################################

Dalai Felinto's avatar
Dalai Felinto committed
class HMD_Data:
    status = None
    projection_matrix = Matrix()
    modelview_matrix = Matrix()
    interpupillary_distance = Vector((0.0, 0.0))
    width = 0
    height = 0
    fbo_id = 0
    texture_id = 0
# ############################################################
# Base class inherited by HMD devices
# ############################################################

class HMD_Base:
Dalai Felinto's avatar
Dalai Felinto committed
    __slots__ = {
        "_fbo",
        "_height",
        "_interpupillary_distance",
        "_modelview_matrix",
        "_name",
        "_offscreen_object",
        "_projection_matrix",
Dalai Felinto's avatar
Dalai Felinto committed
        "_texture",
        "_width",
    def __init__(self, name):
        self._name = name
Dalai Felinto's avatar
Dalai Felinto committed
        self._projection_matrix = Matrix()
        self._modelview_matrix = Matrix()
        self._interpupillary_distance = Vector((0.0, 0.0))
        self._width = 0
        self._height = 0
        self._fbo_id = 0
        self._texture_id = 0
        self._offscreen_object = None

    @property
    def offscreen_object(self):
        return self._offscreen_object
Dalai Felinto's avatar
Dalai Felinto committed

    @property
    def fbo(self):
        return self._fbo_id
Dalai Felinto's avatar
Dalai Felinto committed

    @property
    def texture(self):
        return self._texture_id
Dalai Felinto's avatar
Dalai Felinto committed

    @property
    def width(self):
        return self._width

    @property
    def height(self):
        return self._height

    @property
    def projection_matrix(self):
        return self._projection_matrix

    @property
    def modelview_matrix(self):
        TODO # calculate
        return self._modelview_matrix
Dalai Felinto's avatar
Dalai Felinto committed

    def isConnected(self):
        """
        Check if device is connected

        :return: return True if the device is connected
        :rtype: bool
        """
        assert False, "isConnected() not implemented for the \"{0}\" device".format(self._name)
Dalai Felinto's avatar
Dalai Felinto committed

    def init(self):
        """
        Initialize device

        :return: return True if the device was properly initialized
        :rtype: bool
        """
        try:
            self._offscreen_object = gpu.offscreen_object_create(self._width, self._height)
            self._fbo_id = self._offscreen_object.framebuffer_object
            self._texture_id = self._offscreen_object.color_object

        except Exception as E:
            print(E)
            return False

        else:
            return True
Dalai Felinto's avatar
Dalai Felinto committed

    def loop(self):
        """
        Get fresh tracking data
        """
        assert False, "loop() not implemented for the \"{0}\" device".format(self._name)
Dalai Felinto's avatar
Dalai Felinto committed

    def frameReady(self):
        """
        The frame is ready to be send to the device
        """
        assert False, "frameReady() not implemented for the \"{0}\" device".format(self._name)
Dalai Felinto's avatar
Dalai Felinto committed

    def quit(self):
        """
        Garbage collection
        """
        try:
            gpu.offscreen_object_free(self._offscreen_object)

        except Exception as E:
            print(E)
Dalai Felinto's avatar
Dalai Felinto committed