def __init__(self):
     glrenderer.GlRenderer.__init__(self)
     self.camera_position = CameraPosition()
     self.actors = []
     # self.shader = sphereImposterShaderProgram
     self.background_color = [0.8, 0.8, 1.0, 0.0] # sky blue
     self.stereo_mode = stereo3d.Mono()
     self.sky_box = SkyBox()
     # direction to skybox sun
     self.light_direction = [0.352, 0.812, 0.465, 0.0]
class CinemolRenderer(glrenderer.GlRenderer):
    def __init__(self):
        glrenderer.GlRenderer.__init__(self)
        self.camera_position = CameraPosition()
        self.actors = []
        # self.shader = sphereImposterShaderProgram
        self.background_color = [0.8, 0.8, 1.0, 0.0] # sky blue
        self.stereo_mode = stereo3d.Mono()
        self.sky_box = SkyBox()
        # direction to skybox sun
        self.light_direction = [0.352, 0.812, 0.465, 0.0]
        
    def init_gl(self):
        # print "init_gl"
        bPrintGLInfo = False
        if bPrintGLInfo:
            print "GL Vendor:", glGetString(GL_VENDOR)
            print "GL Renderer:", glGetString(GL_RENDERER)
            print "GL Version (string):", glGetString(GL_VERSION)
            # print glGetInteger(GL_MINOR_VERSION) # exception!?!?
            # print "GL Version (number):", "%d.%d" % (glGetInteger(GL_MAJOR_VERSION), glGetInteger(GL_MINOR_VERSION))
            print "GLSL Version:", glGetString(GL_SHADING_LANGUAGE_VERSION)
        if glInitSeamlessCubeMapARB():
            glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS)
        if glInitFramebufferSrgbEXT():
            glEnable(GL_FRAMEBUFFER_SRGB_EXT)
        # print glGetString(GL_EXTENSIONS)

        glEnable(GL_DEPTH_TEST)
        bg = self.background_color
        glClearColor(bg[0], bg[1], bg[2], bg[3])
        glShadeModel(GL_SMOOTH)
        glEnable(GL_COLOR_MATERIAL)
        glEnable(GL_LIGHTING)
        glEnable(GL_LIGHT0)
        glMaterialfv(GL_FRONT, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0])
        glMaterialfv(GL_FRONT, GL_SHININESS, [100.0])
        glLightfv(GL_LIGHT0, GL_POSITION, self.light_direction)
        glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0])
        glLightfv(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0])
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [0.15, 0.15, 0.15, 0.0])
        glEnable(GL_CULL_FACE)
        self.sky_box.init_gl()
        for actor in self.actors:
            actor.init_gl()
        for rep in model.representations.values():
            # print "init_gl on a representation"
            rep.init_gl()
        # self.shader.init_gl()
        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

    def resize_gl(self, w, h):
        self.camera_position.set_window_size_in_pixels(w, h)
        self.update()
        
    def render_background(self):
        glDrawBuffer(GL_BACK)
        glColorMask(True, True, True, True)
        glClear(GL_COLOR_BUFFER_BIT)
        
    def render_scene(self, camera):
        self.sky_box.paint_gl(camera)
        """
        self.shader.zNear = camera.zNear
        self.shader.zFar = camera.zFar
        self.shader.zFocus = camera.zFocus
        self.shader.background_color = self.background_color
        self.shader.eye_shift = camera.eye_shift_in_ground
        """
        glEnable(GL_DEPTH_TEST)
        # glDepthFunc(GL_LEQUAL)
        glDepthMask(True)
        glClear(GL_DEPTH_BUFFER_BIT)
        for actor in self.actors:
            actor.paint_gl(camera, self)
        for rep in model.representations.values():
            rep.paint_gl(camera, self)

    def paint_gl(self):
        self.render_background()
        for camera in self.stereo_mode.views(self.camera_position):
            self.render_scene(camera)
                
    @QtCore.Slot(float)
    def increment_zoom(self, ratio):
        self.camera_position.increment_zoom(ratio)
        self.update()

    @QtCore.Slot(Rotation)
    def increment_rotation(self, r):
        self.camera_position.increment_rotation(r)
        self.update()
        
    @QtCore.Slot(int, int, int)
    def center_pixel(self, x, y, z):
        self.camera_position.center_pixel(x, y, z)
        self.update()
        
    @QtCore.Slot(int, int, int)
    def translate_pixel(self, x, y, z):
        self.camera_position.translate_pixel(x, y, z)
        self.update()