Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def _get_depthbuffer_texture(self):
- width, height = self.draw_obj.drawing_mgr.region.width, self.draw_obj.drawing_mgr.region.height
- texture_id_buf = Buffer(GL_INT, 1)
- fbo = Buffer(GL_INT, 1)
- glActiveTexture(GL_TEXTURE0)
- glGenTextures(1, texture_id_buf)
- glBindTexture(GL_TEXTURE_2D, texture_id_buf.to_list()[0])
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL)
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0)
- glGenFramebuffers(1, fbo)
- glBindFramebuffer(GL_FRAMEBUFFER, fbo.to_list()[0])
- glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture_id_buf.to_list()[0], 0)
- glDrawBuffer(GL_NONE)
- glCheckError('draw')
- glReadBuffer(GL_NONE)
- fbo_status = glCheckFramebufferStatus(GL_FRAMEBUFFER)
- if fbo_status != GL_FRAMEBUFFER_COMPLETE:
- raise Exception("GL_FRAMEBUFFER_COMPLETE failed, CANNOT use FBO\n")
- glBindFramebuffer(GL_FRAMEBUFFER, 0)
- glBindTexture(GL_TEXTURE_2D, 0)
- glDisable(GL_TEXTURE_2D)
- glBindTexture(GL_TEXTURE_2D, 0)
- glBindFramebuffer(GL_FRAMEBUFFER, fbo.to_list()[0])
- glClear(GL_DEPTH_BUFFER_BIT)
- glColorMask(False, False, False, False)
- glCullFace(GL_BACK)
- glEnable(GL_TEXTURE_2D)
- glBindTexture(GL_TEXTURE_2D, texture_id_buf.to_list()[0])
- glBindFramebuffer(GL_FRAMEBUFFER, 0)
- glColorMask(True, True, True, True)
- return texture_id_buf.to_list()[0]
Add Comment
Please, Sign In to add comment