コード例 #1
0
    def destroy(self):
        """Must be called when this ``RenderTexture`` is no longer needed.
        Destroys the frame buffer and render buffer, and calls
        :meth:`.Texture2D.destroy`.
        """

        texture.Texture2D.destroy(self)

        log.debug('Deleting FBO{} [{}]'.format(self.__frameBuffer,
                                               self.__rttype))

        glfbo.glDeleteFramebuffersEXT(gltypes.GLuint(self.__frameBuffer))

        if self.__renderBuffer is not None:
            rb = gltypes.GLuint(self.__renderBuffer)
            glfbo.glDeleteRenderbuffersEXT(1, rb)

        if self.__depthTexture is not None:
            self.__depthTexture.destroy()

        self.__frameBuffer = None
        self.__renderBuffer = None
        self.__depthTexture = None
        self.__oldFrameBuffer = None
        self.__oldRenderBuffer = None
コード例 #2
0
ファイル: glutils.py プロジェクト: codewarrior0/mcedit
    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
コード例 #3
0
ファイル: glutils.py プロジェクト: someonepic/mcedit
    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()
コード例 #4
0
ファイル: fbo.py プロジェクト: hansent/pymt
 def __del__(self):
     # if application is closed, symbol may be not available anymore
     # so, prevent failure, instead of having an exception !
     if not bool(glDeleteRenderbuffersEXT):
         return
     # XXX deletion of framebuffer failed with PyOpenGL 3.0.0
     # Closed bug : http://sourceforge.net/tracker/index.php?func=detail&aid=2727274&group_id=5988&atid=105988
     # So, we must test the version, and use numpy array instead.
     if OpenGLversion <= (3, 0, 1) and have_numpy:
         glDeleteFramebuffersEXT(1, numpy.array(self.framebuffer))
         if self.with_depthbuffer:
             glDeleteRenderbuffersEXT(1, numpy.array(self.depthbuffer))
     else:
         # XXX Should work, but not tested.
         glDeleteFramebuffersEXT(1, self.framebuffer)
         if self.with_depthbuffer:
             glDeleteRenderbuffersEXT(1, self.depthbuffer)
コード例 #5
0
ファイル: fbo.py プロジェクト: gavine199/pymt
 def __del__(self):
     # if application is closed, symbol may be not available anymore
     # so, prevent failure, instead of having an exception !
     if not bool(glDeleteRenderbuffersEXT):
         return
     # XXX deletion of framebuffer failed with PyOpenGL 3.0.0
     # Closed bug : http://sourceforge.net/tracker/index.php?func=detail&aid=2727274&group_id=5988&atid=105988
     # So, we must test the version, and use numpy array instead.
     if OpenGLversion <= (3, 0, 1) and have_numpy:
         glDeleteFramebuffersEXT(1, numpy.array(self.framebuffer))
         if self.with_depthbuffer:
             glDeleteRenderbuffersEXT(1, numpy.array(self.depthbuffer))
     else:
         # XXX Should work, but not tested.
         glDeleteFramebuffersEXT(1, self.framebuffer)
         if self.with_depthbuffer:
             glDeleteRenderbuffersEXT(1, self.depthbuffer)