- Timestamp:
- 09/24/08 06:28:06 (4 years ago)
- Children:
- 1b0cdd33d70957213349cfa0cae373c7350c73a5
- Parents:
- 206d95c9b3331ad20b32a8ff1c5e9666a2029a28
- git-committer:
- flupke <flupke@…> (09/24/08 06:28:06)
- File:
-
- 1 edited
-
palette/trunk/palette/gl/offscreen.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
palette/trunk/palette/gl/offscreen.py
r206d95c rbfad342 1 1 """Wrapper objects to work with offscreen rendering""" 2 2 3 from OpenGL.EXT.framebuffer_object import * 4 3 from OpenGL.GL.EXT.framebuffer_object import * 4 from OpenGL.GL import * 5 from texture import Texture2D 5 6 6 7 class FrameBuffer(object): 7 8 def __init__(self, size): 9 self.size = size 8 10 # Initialise extension 9 11 if not glInitFramebufferObjectEXT(): 10 raise Exception("Framebuffer object extension is not supporte ")12 raise Exception("Framebuffer object extension is not supported") 11 13 # Create the framebuffer 12 self.framebuffer_id = glGenFramebuffersEXT(1) 13 self.render_buffer_id = glGenRenderbuffersEXT(1) 14 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.render_buffer_id) 15 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 16 size[0], size[1]) 14 self.framebuffer_id = glGenFramebuffersEXT(1) 15 16 def bind(self): 17 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, self.framebuffer_id) 18 glPushAttrib(GL_VIEWPORT_BIT) 19 glViewport(0, 0, *self.size) 20 21 def unbind(self): 22 glPopAttrib() 23 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0) 24 25 def __del__(self): 26 glDeleteFramebuffersEXT(1, [self.framebuffer_id]) 27 28 29 class RenderBuffer(FrameBuffer, Texture2D): 30 def __init__(self, size): 31 FrameBuffer.__init__(self, size) 32 self.bind() 33 # Create the colour (texture) buffer 34 Texture2D.__init__(self, size) 35 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, 36 GL_TEXTURE_2D, self.texture_id, 0) 37 # Create the depth buffer 38 self.depth_buffer_id = glGenRenderbuffersEXT(1) 39 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, self.depth_buffer_id) 40 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, 41 *size) 42 glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, 43 GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 44 self.depth_buffer_id) 45 # Check framebuffer completeness 46 glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT) 47 status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) 48 if status != GL_FRAMEBUFFER_COMPLETE_EXT: 49 raise Exception("Error in framebuffer activation %s" % hex(status)) 50 # Unbind buffer 51 self.unbind() 52 53 def bind(self): 54 FrameBuffer.bind(self) 55 56 def unbind(self): 57 FrameBuffer.unbind(self) 58 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0) 59 60 def bind_texture(self): 61 Texture2D.bind(self) 17 62 18 63 def __del__(self): 19 super(FrameBuffer, self).__del__() 20 glDeleteFramebuffersEXT(1, self.framebuffer_id) 21 glDeleteRenderbuffersEXT(1, self.render_buffer_id) 22 64 FrameBuffer.__del__(self) 65 Texture2D.__del__(self) 66 glDeleteRenderbuffersEXT(1, [self.depth_buffer_id])
Note: See TracChangeset
for help on using the changeset viewer.
