예제 #1
0
def drawScene(frameBuffer, frameTexture):
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)

    GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
    #GL.glPushAttrib(GL.GL_VIEWPORT_BIT);
    GL.glPushMatrix()
    #GL.glViewport(0,0,512,512);

    #    GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    GL.glLoadIdentity()  # Reset The Projection Matrix

    #GL.glDisable(GL.GL_DEPTH_TEST)                   # Enables Depth Testing
    GL.glBegin(GL.GL_POLYGON)  # Start drawing a polygon
    GL.glColor3f(1.0, 0.0, 0.0)  # Red
    GL.glVertex2f(-sqrSize * 0.5, sqrSize * 0.5)  # Top left
    GL.glColor3f(1.0, 1.0, 1.0)  # White
    GL.glVertex2f(sqrSize * 0.5, sqrSize * 0.5)  # Top right
    GL.glColor3f(0.0, 1.0, 0.0)  # Green
    GL.glVertex2f(sqrSize * 0.5, -sqrSize * 0.5)  # Bottom Right
    GL.glColor3f(0.0, 0.0, 1.0)  # Blue
    GL.glVertex2f(-sqrSize * 0.5, -sqrSize * 0.5)  # Bottom Left
    GL.glEnd()

    GL.glColor3f(1.0, 1.0, 1.0)
    #GL.glPopAttrib()
    GL.glPopMatrix()
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)
예제 #2
0
def drawScene(frameBuffer, frameTexture):
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
    
    GL.glClear(GL.GL_COLOR_BUFFER_BIT|GL.GL_DEPTH_BUFFER_BIT)   
    #GL.glPushAttrib(GL.GL_VIEWPORT_BIT);
    GL.glPushMatrix()
    #GL.glViewport(0,0,512,512);
    
#    GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    GL.glLoadIdentity()                     # Reset The Projection Matrix
    
    #GL.glDisable(GL.GL_DEPTH_TEST)                   # Enables Depth Testing
    GL.glBegin(GL.GL_POLYGON)                 # Start drawing a polygon
    GL.glColor3f(1.0, 0.0, 0.0)            # Red
    GL.glVertex2f(-sqrSize*0.5, sqrSize*0.5)           # Top left
    GL.glColor3f(1.0, 1.0, 1.0)            # White
    GL.glVertex2f(sqrSize*0.5, sqrSize*0.5)         # Top right
    GL.glColor3f(0.0, 1.0, 0.0)            # Green
    GL.glVertex2f(sqrSize*0.5, -sqrSize*0.5)          # Bottom Right
    GL.glColor3f(0.0, 0.0, 1.0)            # Blue
    GL.glVertex2f(-sqrSize*0.5, -sqrSize*0.5)         # Bottom Left
    GL.glEnd()      

    GL.glColor3f(1.0, 1.0, 1.0) 
    #GL.glPopAttrib()
    GL.glPopMatrix()
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)
예제 #3
0
파일: fbo.py 프로젝트: gavine199/pymt
 def bind(self):
     super(HardwareFbo, self).bind()
     HardwareFbo.fbo_stack.append(self.framebuffer)
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
     if self.push_viewport:
         glPushAttrib(GL_VIEWPORT_BIT)
         glViewport(0, 0, self.size[0], self.size[1])
예제 #4
0
    def bindAsRenderTarget(self):
        """Configures the frame buffer and render buffer of this
        ``RenderTexture`` as the targets for rendering.

        The existing farme buffer and render buffer are cached, and can be
        restored via the :meth:`unbindAsRenderTarget` method.
        """

        if self.__oldFrameBuffer is not None:
            raise RuntimeError('RenderTexture FBO{} is already '
                               'bound'.format(self.__frameBuffer))

        self.__oldFrameBuffer = gl.glGetIntegerv(
            glfbo.GL_FRAMEBUFFER_BINDING_EXT)

        if self.__renderBuffer is not None:
            self.__oldRenderBuffer = gl.glGetIntegerv(
                glfbo.GL_RENDERBUFFER_BINDING_EXT)

        log.debug('Setting FBO{} as render target'.format(self.__frameBuffer))

        glfbo.glBindFramebufferEXT(glfbo.GL_FRAMEBUFFER_EXT,
                                   self.__frameBuffer)

        if self.__renderBuffer is not None:
            glfbo.glBindRenderbufferEXT(glfbo.GL_RENDERBUFFER_EXT,
                                        self.__renderBuffer)
def flip():
    global frameTexture
    
    if useFBO: 
        FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)
        
        GL.glDisable(GL.GL_BLEND)
        #GL.glBlendEquation(GL.GL_FUNC_ADD)
        #GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
        #GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_DST_ALPHA)
        
        #before flipping need to copy the renderBuffer to the frameBuffer
        GL.glColor4f(1,1,1,1)
        GL.glActiveTexture(GL.GL_TEXTURE0)
        GL.glBindTexture(GL.GL_TEXTURE_2D, frameTexture)
        GL.glBegin( GL.GL_QUADS )
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 0.0, 0.0 ) 
        GL.glVertex2f( -1.0,-1.0 )
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 0.0, 1.0 ) 
        GL.glVertex2f( -1.0, 1.0 )
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0,1.0, 1.0 ) 
        GL.glVertex2f( 1.0,   1.0 )
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 1.0, 0.0 ) 
        GL.glVertex2f( 1.0,   -1.0 )
        GL.glEnd()
    pygame.display.flip()
    
    if useFBO: 
        GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
        GL.glDisable(GL.GL_TEXTURE_2D)
        GL.glEnable(GL.GL_BLEND)
        
        FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
예제 #6
0
파일: fbo.py 프로젝트: hansent/pymt
 def bind(self):
     super(HardwareFbo, self).bind()
     HardwareFbo.fbo_stack.append(self.framebuffer)
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
     if self.push_viewport:
         glPushAttrib(GL_VIEWPORT_BIT)
         glViewport(0, 0, self.size[0], self.size[1])
예제 #7
0
    def _setupFrameBuffer(self):
        # Setup framebuffer
        self.frameBuffer = FB.glGenFramebuffersEXT(1)

        FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, self.frameBuffer)
        # Setup depthbuffer
        self.depthBuffer = FB.glGenRenderbuffersEXT(1)
        FB.glBindRenderbufferEXT (FB.GL_RENDERBUFFER_EXT,self.depthBuffer)
        FB.glRenderbufferStorageEXT (FB.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, int(self.size[0]), int(self.size[1]))

        # Create texture to render to
        self.frameTexture = c_uint(0)
        GL.glGenTextures (1, self.frameTexture)
        GL.glBindTexture (GL.GL_TEXTURE_2D, self.frameTexture)
        GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
        GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
        GL.glTexImage2D (GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, int(self.size[0]), int(self.size[1]), 0,
                         GL.GL_RGBA, GL.GL_FLOAT, None)

        #attach texture to the frame buffer
        FB.glFramebufferTexture2DEXT (FB.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT,
                                      GL.GL_TEXTURE_2D, self.frameTexture, 0)
        FB.glFramebufferRenderbufferEXT(FB.GL_FRAMEBUFFER_EXT, GL.GL_DEPTH_ATTACHMENT_EXT,
                                        FB.GL_RENDERBUFFER_EXT, self.depthBuffer)

        status = FB.glCheckFramebufferStatusEXT (FB.GL_FRAMEBUFFER_EXT)
        if status != FB.GL_FRAMEBUFFER_COMPLETE_EXT:
            logging.warning("Error in framebuffer activation")
            return
        GL.glDisable(GL.GL_TEXTURE_2D)
예제 #8
0
def flip():
    global frameTexture

    if useFBO:
        FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)

        GL.glDisable(GL.GL_BLEND)
        #GL.glBlendEquation(GL.GL_FUNC_ADD)
        #GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
        #GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_DST_ALPHA)

        #before flipping need to copy the renderBuffer to the frameBuffer
        GL.glColor4f(1, 1, 1, 1)
        GL.glActiveTexture(GL.GL_TEXTURE0)
        GL.glBindTexture(GL.GL_TEXTURE_2D, frameTexture)
        GL.glBegin(GL.GL_QUADS)
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 0.0, 0.0)
        GL.glVertex2f(-1.0, -1.0)
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 0.0, 1.0)
        GL.glVertex2f(-1.0, 1.0)
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 1.0, 1.0)
        GL.glVertex2f(1.0, 1.0)
        GL.glMultiTexCoord2f(GL.GL_TEXTURE0, 1.0, 0.0)
        GL.glVertex2f(1.0, -1.0)
        GL.glEnd()
    pygame.display.flip()

    if useFBO:
        GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
        GL.glDisable(GL.GL_TEXTURE_2D)
        GL.glEnable(GL.GL_BLEND)

        FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
예제 #9
0
파일: fbo.py 프로젝트: changcunyuan/gl-agg
def save(display_func, filename="screenshot.png"):
    """
    """

    try:
        import OpenGL.GL.EXT.framebuffer_object as fbo
    except ImportError:
        print 'You do not have the framebuffer extension on your video card'
        print 'Cannot save figure'
        return

    x, y, w, h = gl.glGetIntegerv(gl.GL_VIEWPORT)

    # Setup framebuffer
    framebuffer = fbo.glGenFramebuffersEXT(1)
    fbo.glBindFramebufferEXT(fbo.GL_FRAMEBUFFER_EXT, framebuffer)

    # Setup depthbuffer
    depthbuffer = fbo.glGenRenderbuffersEXT(1)
    fbo.glBindRenderbufferEXT(fbo.GL_RENDERBUFFER_EXT, depthbuffer)
    fbo.glRenderbufferStorageEXT(fbo.GL_RENDERBUFFER_EXT,
                                 gl.GL_DEPTH_COMPONENT, w, h)

    # Create texture to render to
    data = np.zeros((w, h, 4), dtype=np.ubyte)
    texture = gl.glGenTextures(1)
    gl.glBindTexture(gl.GL_TEXTURE_2D, texture)
    gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                       gl.GL_LINEAR)
    gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                       gl.GL_LINEAR)
    gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, w, h, 0, gl.GL_RGBA,
                    gl.GL_UNSIGNED_BYTE, data)
    fbo.glFramebufferTexture2DEXT(gl.GL_FRAMEBUFFER_EXT,
                                  gl.GL_COLOR_ATTACHMENT0_EXT,
                                  gl.GL_TEXTURE_2D, texture, 0)
    fbo.glFramebufferRenderbufferEXT(gl.GL_FRAMEBUFFER_EXT,
                                     gl.GL_DEPTH_ATTACHMENT_EXT,
                                     gl.GL_RENDERBUFFER_EXT, depthbuffer)
    status = fbo.glCheckFramebufferStatusEXT(fbo.GL_FRAMEBUFFER_EXT)

    if status != fbo.GL_FRAMEBUFFER_COMPLETE_EXT:
        raise (RuntimeError, 'Error in framebuffer activation')

    display_func()
    glut.glutSwapBuffers()
    data = gl.glReadPixels(x, y, w, h, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE)

    from PIL import Image
    image = Image.fromstring('RGBA', (w, h), data)
    image = image.transpose(Image.FLIP_TOP_BOTTOM)
    image.save(filename)

    # Cleanup
    fbo.glBindRenderbufferEXT(fbo.GL_RENDERBUFFER_EXT, 0)
    fbo.glBindFramebufferEXT(fbo.GL_FRAMEBUFFER_EXT, 0)
    gl.glDeleteTextures(texture)
    fbo.glDeleteFramebuffersEXT([
        framebuffer,
    ])
예제 #10
0
파일: fbo.py 프로젝트: Eric89GXL/gl-agg
def save(display_func, filename="screenshot.png"):
    """  """

    try:
        import OpenGL.GL.EXT.framebuffer_object as fbo
    except ImportError:
        print 'You do not have the framebuffer extension on your video card'
        print 'Cannot save figure'
        return

    x,y,w,h = gl.glGetIntegerv(gl.GL_VIEWPORT)

    # Setup framebuffer
    framebuffer = fbo.glGenFramebuffersEXT(1)
    fbo.glBindFramebufferEXT( fbo.GL_FRAMEBUFFER_EXT, framebuffer)

    # Setup depthbuffer
    depthbuffer = fbo.glGenRenderbuffersEXT( 1 )
    fbo.glBindRenderbufferEXT( fbo.GL_RENDERBUFFER_EXT, depthbuffer )
    fbo.glRenderbufferStorageEXT( fbo.GL_RENDERBUFFER_EXT, gl.GL_DEPTH_COMPONENT, w, h)
    
    # Create texture to render to
    data = np.zeros((w,h,4), dtype=np.ubyte)
    texture = gl.glGenTextures(1)
    gl.glBindTexture( gl.GL_TEXTURE_2D, texture)
    gl.glTexParameteri( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR)
    gl.glTexParameteri( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR)
    gl.glTexImage2D( gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, w, h, 0,
                     gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, data)
    fbo.glFramebufferTexture2DEXT( gl.GL_FRAMEBUFFER_EXT, gl.GL_COLOR_ATTACHMENT0_EXT,
                                   gl.GL_TEXTURE_2D, texture, 0)
    fbo.glFramebufferRenderbufferEXT( gl.GL_FRAMEBUFFER_EXT, gl.GL_DEPTH_ATTACHMENT_EXT, 
                                      gl.GL_RENDERBUFFER_EXT, depthbuffer)
    status = fbo.glCheckFramebufferStatusEXT( fbo.GL_FRAMEBUFFER_EXT )

    if status != fbo.GL_FRAMEBUFFER_COMPLETE_EXT:
        raise(RuntimeError, 'Error in framebuffer activation')

    display_func()
    glut.glutSwapBuffers()
    data = gl.glReadPixels (x,y,w,h, gl.GL_RGB, gl.GL_UNSIGNED_BYTE)

    from PIL import Image
    #from PIL.ImageCms import profileToProfile
    #ADOBE_RGB_PROFILE = "AdobeRGB1998.icc"
    #SRGB_PROFILE = "./sRGB.icc"
    #RGB_PROFILE = "./RGB.icc"
    image = Image.fromstring('RGB', (w,h), data)
    #profileToProfile(image, RGB_PROFILE, ADOBE_RGB_PROFILE, inPlace=1)
    image = image.transpose(Image.FLIP_TOP_BOTTOM)
    image.save (filename)


    # Cleanup
    fbo.glBindRenderbufferEXT( fbo.GL_RENDERBUFFER_EXT, 0 )
    fbo.glBindFramebufferEXT( fbo.GL_FRAMEBUFFER_EXT, 0 )
    gl.glDeleteTextures( texture )
    fbo.glDeleteFramebuffersEXT( [framebuffer,] )
예제 #11
0
파일: figure.py 프로젝트: lordi/dantien
    def save(self, filename):
        '''
        '''

        try:
            import OpenGL.GL.EXT.framebuffer_object as fbo
        except ImportError:
            print 'You do not have the framebuffer extension on your video card'
            print 'Cannot save figure'
            return

        w,h = self.window.width, self.window.height
        # Setup framebuffer
        framebuffer = fbo.glGenFramebuffersEXT(1)
        fbo.glBindFramebufferEXT( fbo.GL_FRAMEBUFFER_EXT, framebuffer)

        # Setup depthbuffer
        depthbuffer = fbo.glGenRenderbuffersEXT( 1 )
        fbo.glBindRenderbufferEXT( fbo.GL_RENDERBUFFER_EXT, depthbuffer )
        fbo.glRenderbufferStorageEXT( fbo.GL_RENDERBUFFER_EXT, gl.GL_DEPTH_COMPONENT, w, h)
    
        # Create texture to render to
        data = np.zeros((w,h,4), dtype=np.ubyte)
        texture = gl.glGenTextures(1)
        gl.glBindTexture( gl.GL_TEXTURE_2D, texture)
        gl.glTexParameteri( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR)
        gl.glTexParameteri( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR)
        gl.glTexImage2D( gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, w, h, 0,
                         gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, data)
        fbo.glFramebufferTexture2DEXT( gl.GL_FRAMEBUFFER_EXT, gl.GL_COLOR_ATTACHMENT0_EXT,
                                       gl.GL_TEXTURE_2D, texture, 0)
        fbo.glFramebufferRenderbufferEXT( gl.GL_FRAMEBUFFER_EXT, gl.GL_DEPTH_ATTACHMENT_EXT, 
                                          gl.GL_RENDERBUFFER_EXT, depthbuffer)
        status = fbo.glCheckFramebufferStatusEXT( fbo.GL_FRAMEBUFFER_EXT )

        if status != fbo.GL_FRAMEBUFFER_COMPLETE_EXT:
            raise(RuntimeError, 'Error in framebuffer activation')

        self.redraw()
        self.window.refresh()
        
        x,y,w,h = self.viewport
        data = gl.glReadPixels (x,y,w, h, gl.GL_RGBA,  gl.GL_UNSIGNED_BYTE)
        from PIL import Image
        image = Image.fromstring('RGBA', (w,h), data)
        image = image.transpose(Image.FLIP_TOP_BOTTOM)
        image.save (filename)

        # Cleanup
        fbo.glBindRenderbufferEXT( fbo.GL_RENDERBUFFER_EXT, 0 )
        fbo.glBindFramebufferEXT( fbo.GL_FRAMEBUFFER_EXT, 0 )
        gl.glDeleteTextures( texture )
        fbo.glDeleteFramebuffersEXT( [framebuffer,] )
예제 #12
0
def createFBO(size=None):
    """ Offscreen rendering
    
    Save an offscreen rendering of size (w,h) to filename.
    """
    def round2(n):
        """ Get nearest power of two superior to n """
        f = 1
        while f < n:
            f *= 2
        return f

    if size == None:
        size = (512, 512)
    w = round2(size[0])
    h = round2(size[1])

    # Setup framebuffer
    frameBuffer = FB.glGenFramebuffersEXT(1)
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)

    # Setup depthbuffer
    depthBuffer = FB.glGenRenderbuffersEXT(1)
    FB.glBindRenderbufferEXT(FB.GL_RENDERBUFFER_EXT, depthBuffer)
    FB.glRenderbufferStorageEXT(FB.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT,
                                w, h)

    # Create texture to render to
    texture = GL.glGenTextures(1)
    GL.glBindTexture(GL.GL_TEXTURE_2D, texture)
    GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
                       GL.GL_LINEAR)
    GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
                       GL.GL_LINEAR)
    GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, w, h, 0,
                    GL.GL_RGBA, GL.GL_FLOAT, None)

    #attach texture to the frame buffer
    FB.glFramebufferTexture2DEXT(FB.GL_FRAMEBUFFER_EXT,
                                 GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D,
                                 texture, 0)
    FB.glFramebufferRenderbufferEXT(FB.GL_FRAMEBUFFER_EXT,
                                    GL.GL_DEPTH_ATTACHMENT_EXT,
                                    FB.GL_RENDERBUFFER_EXT, depthBuffer)

    status = FB.glCheckFramebufferStatusEXT(FB.GL_FRAMEBUFFER_EXT)
    if status != FB.GL_FRAMEBUFFER_COMPLETE_EXT:
        print "Error in framebuffer activation"
        return
    GL.glDisable(GL.GL_TEXTURE_2D)
    return frameBuffer, texture, depthBuffer
예제 #13
0
파일: fbo.py 프로젝트: hansent/pymt
    def __init__(self, **kwargs):
        super(HardwareFbo, self).__init__(**kwargs)
        self.framebuffer = None
        self.depthbuffer = None

        set_texture(self.texture)

        self.framebuffer = glGenFramebuffersEXT(1)
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
        if self.framebuffer == 0:
            raise "Failed to initialize framebuffer"

        if self.with_depthbuffer:
            self.depthbuffer = glGenRenderbuffersEXT(1)
            glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.depthbuffer)
            glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, self.realsize[0], self.realsize[1])
            glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0)
            glFramebufferRenderbufferEXT(
                GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, self.depthbuffer
            )

        glFramebufferTexture2DEXT(
            GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, get_texture_id(self.texture), 0
        )

        # check the fbo status
        status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
        if status != GL_FRAMEBUFFER_COMPLETE_EXT:
            pymt.pymt_logger.error("Fbo: Error in framebuffer activation")
            pymt.pymt_logger.error(
                "Fbo: Details: HardwareFbo size=%s, realsize=%s, format=GL_RGBA" % (str(self.size), str(self.realsize))
            )
            if status in HardwareFbo.gl_fbo_errors:
                pymt.pymt_logger.error("Fbo: Details: %s (%d)" % (HardwareFbo.gl_fbo_errors[status], status))
            else:
                pymt.pymt_logger.error("Fbo: Details: Unknown error (%d)" % status)

            pymt.pymt_logger.error("Fbo: ")
            pymt.pymt_logger.error("Fbo: You cannot use Hardware FBO.")
            pymt.pymt_logger.error("Fbo: Please change the configuration to use Software FBO.")
            pymt.pymt_logger.error("Fbo: You can use the pymt-config tools, or edit the configuration to set:")
            pymt.pymt_logger.error("Fbo: ")
            pymt.pymt_logger.error("Fbo: [graphics]")
            pymt.pymt_logger.error("Fbo: fbo = software")
            pymt.pymt_logger.error("Fbo: ")

            raise UnsupportedFboException()

        # unbind framebuffer
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
예제 #14
0
파일: fbo.py 프로젝트: gavine199/pymt
    def __init__(self, **kwargs):
        super(HardwareFbo, self).__init__(**kwargs)
        self.framebuffer    = None
        self.depthbuffer    = None

        set_texture(self.texture)

        self.framebuffer = glGenFramebuffersEXT(1)
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer)
        if self.framebuffer == 0:
            raise 'Failed to initialize framebuffer'

        if self.with_depthbuffer:
            self.depthbuffer = glGenRenderbuffersEXT(1)
            glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.depthbuffer)
            glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
                                     self.realsize[0], self.realsize[1])
            glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0)
            glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
                                         GL_RENDERBUFFER_EXT, self.depthbuffer)

        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
                GL_TEXTURE_2D, get_texture_id(self.texture), 0)

        # check the fbo status
        status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
        if status != GL_FRAMEBUFFER_COMPLETE_EXT:
            pymt.pymt_logger.error('Fbo: Error in framebuffer activation')
            pymt.pymt_logger.error('Fbo: Details: HardwareFbo size=%s, realsize=%s, format=GL_RGBA' % (
                str(self.size), str(self.realsize)))
            if status in HardwareFbo.gl_fbo_errors:
                pymt.pymt_logger.error('Fbo: Details: %s (%d)' % (HardwareFbo.gl_fbo_errors[status], status))
            else:
                pymt.pymt_logger.error('Fbo: Details: Unknown error (%d)' % status)

            pymt.pymt_logger.error('Fbo: ')
            pymt.pymt_logger.error('Fbo: You cannot use Hardware FBO.')
            pymt.pymt_logger.error('Fbo: Please change the configuration to use Software FBO.')
            pymt.pymt_logger.error('Fbo: You can use the pymt-config tools, or edit the configuration to set:')
            pymt.pymt_logger.error('Fbo: ')
            pymt.pymt_logger.error('Fbo: [graphics]')
            pymt.pymt_logger.error('Fbo: fbo = software')
            pymt.pymt_logger.error('Fbo: ')

            raise UnsupportedFboException()

        # unbind framebuffer
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)
예제 #15
0
def createFBO(size=None):
    """ Offscreen rendering
    
    Save an offscreen rendering of size (w,h) to filename.
    """
    def round2 (n):
        """ Get nearest power of two superior to n """
        f = 1
        while f<n:
            f*= 2
        return f

    if size == None:
        size = (512,512)
    w = round2 (size[0])
    h = round2 (size[1])

    # Setup framebuffer
    frameBuffer = FB.glGenFramebuffersEXT(1)
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
    
    # Setup depthbuffer
    depthBuffer = FB.glGenRenderbuffersEXT(1)
    FB.glBindRenderbufferEXT (FB.GL_RENDERBUFFER_EXT,depthBuffer)
    FB.glRenderbufferStorageEXT (FB.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, w, h)
        
    # Create texture to render to
    texture = GL.glGenTextures (1)
    GL.glBindTexture (GL.GL_TEXTURE_2D, texture)
    GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
    GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
    GL.glTexImage2D (GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, w, h, 0,
                    GL.GL_RGBA, GL.GL_FLOAT, None)
    
    #attach texture to the frame buffer
    FB.glFramebufferTexture2DEXT (FB.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT,
                               GL.GL_TEXTURE_2D, texture, 0);
    FB.glFramebufferRenderbufferEXT(FB.GL_FRAMEBUFFER_EXT, GL.GL_DEPTH_ATTACHMENT_EXT, 
                                 FB.GL_RENDERBUFFER_EXT, depthBuffer);
                                
    status = FB.glCheckFramebufferStatusEXT (FB.GL_FRAMEBUFFER_EXT);
    if status != FB.GL_FRAMEBUFFER_COMPLETE_EXT:
        print "Error in framebuffer activation"
        return    
    GL.glDisable(GL.GL_TEXTURE_2D);
    return frameBuffer, texture, depthBuffer
예제 #16
0
def flip():
    global frameTexture
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)
    
    #before flipping need to copy the renderBuffer to the frameBuffer
    GL.glEnable(GL.GL_TEXTURE_2D)
    GL.glBindTexture(GL.GL_TEXTURE_2D, frameTexture)
    GL.glBegin( GL.GL_QUADS )
    GL.glTexCoord2f( 0.0, 0.0 ) ; GL.glVertex2f( -1.0,-1.0 )
    GL.glTexCoord2f( 0.0, 1.0 ) ; GL.glVertex2f( -1.0, 1.0 )
    GL.glTexCoord2f( 1.0, 1.0 ) ; GL.glVertex2f( 1.0,   1.0 )
    GL.glTexCoord2f( 1.0, 0.0 ) ; GL.glVertex2f( 1.0,   -1.0 )
    GL.glEnd()
#    GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
    pygame.display.flip()
    GL.glDisable(GL.GL_TEXTURE_2D);
    
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
예제 #17
0
def createFBO(size):
    """ Offscreen rendering
    """
    w = size[0]
    h = size[1]

    # Setup framebuffer
    frameBuffer = FB.glGenFramebuffersEXT(1)
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)

    # Setup depthbuffer
    depthBuffer = FB.glGenRenderbuffersEXT(1)
    FB.glBindRenderbufferEXT(FB.GL_RENDERBUFFER_EXT, depthBuffer)
    FB.glRenderbufferStorageEXT(FB.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT,
                                w, h)

    # Create texture to render to
    GL.glEnable(GL.GL_TEXTURE_2D)
    texture = GL.glGenTextures(1)
    GL.glBindTexture(GL.GL_TEXTURE_2D, texture)
    GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
                       GL.GL_LINEAR)
    GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
                       GL.GL_LINEAR)
    GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, w, h, 0,
                    GL.GL_RGBA, GL.GL_FLOAT, None)

    #attach texture to the frame buffer
    FB.glFramebufferTexture2DEXT(FB.GL_FRAMEBUFFER_EXT,
                                 GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D,
                                 texture, 0)
    FB.glFramebufferRenderbufferEXT(FB.GL_FRAMEBUFFER_EXT,
                                    GL.GL_DEPTH_ATTACHMENT_EXT,
                                    FB.GL_RENDERBUFFER_EXT, depthBuffer)

    status = FB.glCheckFramebufferStatusEXT(FB.GL_FRAMEBUFFER_EXT)
    if status != FB.GL_FRAMEBUFFER_COMPLETE_EXT:
        print "Error in framebuffer activation"
        return
    GL.glBindTexture(GL.GL_TEXTURE_2D, 0)  #unbind that name to the target
    GL.glDisable(GL.GL_TEXTURE_2D)
    return frameBuffer, texture, depthBuffer
예제 #18
0
    def unbindAsRenderTarget(self):
        """Restores the frame buffer and render buffer which were saved via a
        prior call to :meth:`bindAsRenderTarget`.
        """

        if self.__oldFrameBuffer is None:
            raise RuntimeError('RenderTexture FBO{} has not been '
                               'bound'.format(self.__frameBuffer))

        log.debug('Restoring render target to FBO%s (from FBO%s)',
                  self.__oldFrameBuffer, self.__frameBuffer)

        glfbo.glBindFramebufferEXT(glfbo.GL_FRAMEBUFFER_EXT,
                                   self.__oldFrameBuffer)

        if self.__renderBuffer is not None:
            glfbo.glBindRenderbufferEXT(glfbo.GL_RENDERBUFFER_EXT,
                                        self.__oldRenderBuffer)

        self.__oldFrameBuffer = None
        self.__oldRenderBuffer = None
예제 #19
0
    def __init__(self, width, height, drawFunc):
        tex = GL.glGenTextures(1)
        GL.glBindTexture(GL.GL_TEXTURE_2D, tex)
        GL.glTexParameter(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST)
        GL.glTexParameter(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST)
        GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, None)
        self.enabled = False
        self._texID = tex
        if FBO.glGenFramebuffersEXT:
            buf = FBO.glGenFramebuffersEXT(1)
            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, buf)
            depthbuffer = FBO.glGenRenderbuffersEXT(1)
            FBO.glBindRenderbufferEXT(FBO.GL_RENDERBUFFER_EXT, depthbuffer)
            FBO.glRenderbufferStorageEXT(FBO.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, width, height)
            FBO.glFramebufferRenderbufferEXT(FBO.GL_FRAMEBUFFER_EXT, FBO.GL_DEPTH_ATTACHMENT_EXT, FBO.GL_RENDERBUFFER_EXT, depthbuffer)
            FBO.glFramebufferTexture2DEXT(FBO.GL_FRAMEBUFFER_EXT, FBO.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D, tex, 0)
            status = FBO.glCheckFramebufferStatusEXT(FBO.GL_FRAMEBUFFER_EXT)
            if status != FBO.GL_FRAMEBUFFER_COMPLETE_EXT:
                print "glCheckFramebufferStatusEXT", status
                self.enabled = False
                return

            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, buf)
            GL.glPushAttrib(GL.GL_VIEWPORT_BIT)
            GL.glViewport(0, 0, width, height)

            drawFunc()
            GL.glPopAttrib()
            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, 0)
            FBO.glDeleteFramebuffersEXT(1, [buf])
            FBO.glDeleteRenderbuffersEXT(1, [depthbuffer])
            self.enabled = True
예제 #20
0
def flip():
    global frameTexture
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)

    #before flipping need to copy the renderBuffer to the frameBuffer
    GL.glEnable(GL.GL_TEXTURE_2D)
    GL.glBindTexture(GL.GL_TEXTURE_2D, frameTexture)
    GL.glBegin(GL.GL_QUADS)
    GL.glTexCoord2f(0.0, 0.0)
    GL.glVertex2f(-1.0, -1.0)
    GL.glTexCoord2f(0.0, 1.0)
    GL.glVertex2f(-1.0, 1.0)
    GL.glTexCoord2f(1.0, 1.0)
    GL.glVertex2f(1.0, 1.0)
    GL.glTexCoord2f(1.0, 0.0)
    GL.glVertex2f(1.0, -1.0)
    GL.glEnd()
    #    GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
    pygame.display.flip()
    GL.glDisable(GL.GL_TEXTURE_2D)

    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
예제 #21
0
    def __init__(self, width, height, drawFunc):
        tex = GL.glGenTextures(1)
        GL.glBindTexture(GL.GL_TEXTURE_2D, tex)
        GL.glTexParameter(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST)
        GL.glTexParameter(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST)
        GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, None)
        self.enabled = False
        self._texID = tex
        if bool(FBO.glGenFramebuffersEXT):
            buf = FBO.glGenFramebuffersEXT(1)
            depthbuffer = FBO.glGenRenderbuffersEXT(1)

            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, buf)

            FBO.glBindRenderbufferEXT(FBO.GL_RENDERBUFFER_EXT, depthbuffer)
            FBO.glRenderbufferStorageEXT(FBO.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, width, height)

            FBO.glFramebufferRenderbufferEXT(FBO.GL_FRAMEBUFFER_EXT, FBO.GL_DEPTH_ATTACHMENT_EXT, FBO.GL_RENDERBUFFER_EXT, depthbuffer)
            FBO.glFramebufferTexture2DEXT(FBO.GL_FRAMEBUFFER_EXT, FBO.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D, tex, 0)

            status = FBO.glCheckFramebufferStatusEXT(FBO.GL_FRAMEBUFFER_EXT)
            if status != FBO.GL_FRAMEBUFFER_COMPLETE_EXT:
                print "glCheckFramebufferStatusEXT", status
                self.enabled = False
                return

            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, buf)

            with gl.glPushAttrib(GL.GL_VIEWPORT_BIT):
                GL.glViewport(0, 0, width, height)
                drawFunc()

            FBO.glBindFramebufferEXT(FBO.GL_FRAMEBUFFER_EXT, 0)
            FBO.glDeleteFramebuffersEXT(1, [buf])
            FBO.glDeleteRenderbuffersEXT(1, [depthbuffer])
            self.enabled = True
        else:
            GL.glReadBuffer(GL.GL_BACK)
            if bool(window_pos.glWindowPos2dARB):
                pixels = GL.glReadPixels(0, 0, width, height, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE)

            GL.glPushAttrib(GL.GL_VIEWPORT_BIT | GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT | GL.GL_STENCIL_TEST | GL.GL_STENCIL_BUFFER_BIT)
            GL.glDisable(GL.GL_STENCIL_TEST)

            GL.glViewport(0, 0, width, height)
            GL.glScissor(0, 0, width, height)
            with gl.glEnable(GL.GL_SCISSOR_TEST):
                drawFunc()

            GL.glBindTexture(GL.GL_TEXTURE_2D, tex)
            GL.glReadBuffer(GL.GL_BACK)
            GL.glCopyTexSubImage2D(GL.GL_TEXTURE_2D, 0, 0, 0, 0, 0, width, height)

            if bool(window_pos.glWindowPos2dARB):
                window_pos.glWindowPos2dARB(0,0)
                GL.glDrawPixels(width, height, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixels)

            GL.glPopAttrib()
def createFBO(size):
    """ Offscreen rendering
    """
    w =  size[0]
    h = size[1]

    # Setup framebuffer
    frameBuffer = FB.glGenFramebuffersEXT(1)
    FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, frameBuffer)
    
    # Setup depthbuffer
    depthBuffer = FB.glGenRenderbuffersEXT(1)
    FB.glBindRenderbufferEXT (FB.GL_RENDERBUFFER_EXT,depthBuffer)
    FB.glRenderbufferStorageEXT (FB.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, w, h)
        
    # Create texture to render to
    GL.glEnable(GL.GL_TEXTURE_2D)
    texture = GL.glGenTextures (1)
    GL.glBindTexture (GL.GL_TEXTURE_2D, texture)
    GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
    GL.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
    GL.glTexImage2D (GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, w, h, 0,
                    GL.GL_RGBA, GL.GL_FLOAT, None)
    
    #attach texture to the frame buffer
    FB.glFramebufferTexture2DEXT (FB.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT,
                               GL.GL_TEXTURE_2D, texture, 0);
    FB.glFramebufferRenderbufferEXT(FB.GL_FRAMEBUFFER_EXT, GL.GL_DEPTH_ATTACHMENT_EXT, 
                                 FB.GL_RENDERBUFFER_EXT, depthBuffer);
                                
    status = FB.glCheckFramebufferStatusEXT (FB.GL_FRAMEBUFFER_EXT);
    if status != FB.GL_FRAMEBUFFER_COMPLETE_EXT:
        print "Error in framebuffer activation"
        return    
    GL.glBindTexture(GL.GL_TEXTURE_2D, 0)#unbind that name to the target
    GL.glDisable(GL.GL_TEXTURE_2D)
    return frameBuffer, texture, depthBuffer
예제 #23
0
파일: mplay.py 프로젝트: FlorianRhiem/mplay
def main(path=None):
    glutInit(sys.argv)

    if sys.platform == 'darwin':
        if not path:
            path = dialog()

    if not path:
        sys.exit(0)

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE)
    glutInitWindowPosition(0, 0)
    glutInitWindowSize(730, 650)

    win = glutCreateWindow(b'MIDI Player')

    (width, height, img) = read_image('mixer.ppm')
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1)

    rbo = c_uint(int(glGenRenderbuffersEXT(1)))
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rbo)
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, width, height)

    fbo = c_uint(int(glGenFramebuffersEXT(1)))
    glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, fbo)
    glFramebufferRenderbufferEXT(GL_READ_FRAMEBUFFER_EXT,
                                 GL_COLOR_ATTACHMENT0_EXT,
                                 GL_RENDERBUFFER_EXT, rbo)

    glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fbo)
    glClear(GL_COLOR_BUFFER_BIT)
    glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, img)
    glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0)

    player = Player(win, path, width, height)

    glutDisplayFunc(player.display_func)
    glutKeyboardFunc(player.keyboard_func)
    glutMouseFunc(player.mouse_func)
    glutMotionFunc(player.motion_func)
    glutIdleFunc(player.process_events)

    submenus = []
    for instrument in range(128):
        if instrument % 8 == 0:
            submenus.append([families[instrument // 8],
                             glutCreateMenu(player.change_instrument)])
        glutAddMenuEntry(instruments[instrument].encode('ascii'), instrument)
    glutCreateMenu(player.change_instrument)
    for family, submenu in submenus:
        glutAddSubMenu(family.encode('ascii'), submenu)
    glutAttachMenu(GLUT_RIGHT_BUTTON)

    glutMainLoop()
예제 #24
0
    def flip(self, clearBuffer=True):
        """Flip the front and back buffers after drawing everything for your frame.
        (This replaces the win.update() method, better reflecting what is happening underneath).

        win.flip(clearBuffer=True)#results in a clear screen after flipping
        win.flip(clearBuffer=False)#the screen is not cleared (so represent the previous screen)
        """
        for thisStim in self._toDraw:
            thisStim.draw()

        

        if haveFB:
            #need blit the frambuffer object to the actual back buffer
            
            FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, 0)#unbind the framebuffer as the render target

            #before flipping need to copy the renderBuffer to the frameBuffer
            '''
            GL.glActiveTexture(GL.GL_TEXTURE0)
            GL.glEnable(GL.GL_TEXTURE_2D)
            GL.glBindTexture(GL.GL_TEXTURE_2D, self.frameTexture)
            GL.glBegin( GL.GL_QUADS )
            GL.glTexCoord2f( 0.0, 0.0 ) ; GL.glVertex2f( -1.0,-1.0 )
            GL.glTexCoord2f( 0.0, 1.0 ) ; GL.glVertex2f( -1.0,1.0 )
            GL.glTexCoord2f( 1.0, 1.0 ) ; GL.glVertex2f( 1.0,1.0 )
            GL.glTexCoord2f( 1.0, 0.0 ) ; GL.glVertex2f( 1.0,-1.0 )
            GL.glEnd()
            '''

            GL.glActiveTexture(GL.GL_TEXTURE0)
            GL.glEnable(GL.GL_TEXTURE_2D)
            GL.glBindTexture(GL.GL_TEXTURE_2D, self.frameTexture)
            GL.glBegin( GL.GL_QUADS )

            GL.glTexCoord2f( 0.0, 0.0 ) ; GL.glVertex3f( -1.0,-1.0, 0.0 )
            GL.glTexCoord2f( 0.0, 1.0 ) ; GL.glVertex3f( -1.0,1.0, 0.0 )
            GL.glTexCoord2f( 1.0, 1.0 ) ; GL.glVertex3f( 1.0,1.0, 0.0 )
            GL.glTexCoord2f( 1.0, 0.0 ) ; GL.glVertex3f( 1.0,-1.0, 0.0 )

            GL.glEnd()
            

        if self.winType =="pyglet":
            #make sure this is current context
            self.winHandle.switch_to()

            GL.glTranslatef(0.0,0.0,-5.0)

            for dispatcher in self._eventDispatchers:
                dispatcher._dispatch_events()
            self.winHandle.dispatch_events()#this might need to be done even more often than once per frame?
            #pyglet.media.dispatch_events()#for sounds to be processed
            self.winHandle.flip()
            #self.winHandle.clear()
            GL.glLoadIdentity()


        #rescale/reposition view of the window
        if self.viewScale != None:
            GL.glMatrixMode(GL.GL_PROJECTION)
            GL.glLoadIdentity()
            GL.glOrtho(-1,1,-1,1,-1,1)
            GL.glScalef(self.viewScale[0], self.viewScale[1], 1)
        if self.viewPos != None:
            GL.glMatrixMode(GL.GL_MODELVIEW)
#            GL.glLoadIdentity()
            if self.viewScale==None: scale=[1,1]
            else: scale=self.viewScale
            norm_rf_pos_x = self.viewPos[0]/scale[0]
            norm_rf_pos_y = self.viewPos[1]/scale[1]
            GL.glTranslatef( norm_rf_pos_x, norm_rf_pos_y, 0.0)
        if self.viewOri != None:
            GL.glRotatef( self.viewOri, 0.0, 0.0, 0.0)

        if haveFB:
            #set rendering back to the framebuffer object
            FB.glBindFramebufferEXT(FB.GL_FRAMEBUFFER_EXT, self.frameBuffer)

        #reset returned buffer for next frame
        if clearBuffer: GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
        else: GL.glClear(GL.GL_DEPTH_BUFFER_BIT)#always clear the depth bit
        self._defDepth=0.0#gets gradually updated through frame

        #waitBlanking
        if self.waitBlanking:
            GL.glBegin(GL.GL_POINTS)
            GL.glColor4f(0,0,0,0)
            if sys.platform=='win32' and self.glVendor.startswith('ati'):
                pass
            else:
                GL.glVertex2i(10,10)#this corrupts text rendering on win with some ATI cards :-(
            GL.glEnd()
            GL.glFlush()

        #get timestamp
        now = logging.defaultClock.getTime()
        if self.recordFrameIntervals:
            self.frames +=1
            deltaT = now - self.lastFrameT
            self.lastFrameT=now
            if self.recordFrameIntervalsJustTurnedOn: #don't do anything
                self.recordFrameIntervalsJustTurnedOn = False
            else: #past the first frame since turned on
              self.frameIntervals.append(deltaT)
              if deltaT > self._refreshThreshold:
                   self.nDroppedFrames+=1
                   if self.nDroppedFrames<reportNDroppedFrames:
                       logging.warning('t of last frame was %.2fms (=1/%i)' %(deltaT*1000, 1/deltaT), t=now)
                   elif self.nDroppedFrames==reportNDroppedFrames:
                       logging.warning("Multiple dropped frames have occurred - I'll stop bothering you about them!")

        #log events
        for logEntry in self._toLog:
            #{'msg':msg,'level':level,'obj':copy.copy(obj)}
            logging.log(msg=logEntry['msg'], level=logEntry['level'], t=now, obj=logEntry['obj'])
        self._toLog = []

        #    If self.waitBlanking is True, then return the time that
        # GL.glFinish() returned, set as the 'now' variable. Otherwise
        # return None as before
        #
        if self.waitBlanking is True:
            return now
예제 #25
0
파일: fbo.py 프로젝트: hansent/pymt
 def release(self):
     if self.push_viewport:
         glPopAttrib()
     HardwareFbo.fbo_stack.pop()
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, HardwareFbo.fbo_stack[-1])
     super(HardwareFbo, self).release()
예제 #26
0
파일: fbo.py 프로젝트: gavine199/pymt
 def release(self):
     if self.push_viewport:
         glPopAttrib()
     HardwareFbo.fbo_stack.pop()
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, HardwareFbo.fbo_stack[-1])
     super(HardwareFbo, self).release()