Ignore:
Timestamp:
09/24/08 06:28:06 (4 years ago)
Author:
flupke <flupke@…>
Children:
1b0cdd33d70957213349cfa0cae373c7350c73a5
Parents:
206d95c9b3331ad20b32a8ff1c5e9666a2029a28
git-committer:
flupke <flupke@…> (09/24/08 06:28:06)
Message:

palette:

  • corrigé l'init de GLUT pour que la fenêtre soit créée avec la taille spécifiée dans le plugin
  • les classes pour utilisers les FBO fonctionnent
  • fait un test d'encodage d'animation en moiré


git-svn-id:  http://kawa.selfip.org/svn/projects@503 532e76a9-45ae-c241-9c6d-8309ac6440cd

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palette/trunk/palette/gl/offscreen.py

    r206d95c rbfad342  
    11"""Wrapper objects to work with offscreen rendering""" 
    22 
    3 from OpenGL.EXT.framebuffer_object import * 
    4  
     3from OpenGL.GL.EXT.framebuffer_object import * 
     4from OpenGL.GL import * 
     5from texture import Texture2D 
    56 
    67class FrameBuffer(object): 
    78    def __init__(self, size): 
     9        self.size = size 
    810        # Initialise extension 
    911        if not glInitFramebufferObjectEXT(): 
    10             raise Exception("Framebuffer object extension is not supporte") 
     12            raise Exception("Framebuffer object extension is not supported") 
    1113        # 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 
     29class 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) 
    1762 
    1863    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.