Changeset bfad34229eccba8d964a27a0fb3a2084c612a7b9


Ignore:
Timestamp:
09/24/08 06:28:06 (3 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

Location:
palette/trunk/palette
Files:
1 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • palette/trunk/palette/canvas/backends/glut_backend.py

    r206d95c rbfad342  
    1919        glutInit() 
    2020        glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) 
     21        glutInitWindowSize(*self.size)         
    2122        self.window_id = glutCreateWindow("Palette") 
    2223        glutDisplayFunc(self.update) 
     
    3132    def resize(self, size): 
    3233        super(Canvas, self).resize(size) 
    33         glutInitWindowSize(*self.size) 
    3434        glViewport(0, 0, *size) 
    3535         
  • 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]) 
  • palette/trunk/palette/gl/texture.py

    r206d95c rbfad342  
    11from OpenGL.GL import * 
    2 from OpenGL import GL 
    3  
    4  
    5 texture_types = {} 
    6 for i in range(1, 4): 
    7     texture_types[i] = getattr(GL, "GL_TEXTURE_%iD" % i) 
    8      
     2import Image 
    93 
    104 
    115class Texture(object): 
    12     def __init__(self, size, type): 
    13         self.texture_id = glGenTextures(1) 
    14         glBindTexture(type, self.texture_id) 
    15         glTexImage2D(type, 0, GL_RGB, size[0], size[1], 0, GL_RGB, 
    16             GL_UNSIGNED_BYTE, 0) 
    17         glTexParameteri(type, GL_TEXTURE_MAG_FILTER, GL_LINEAR) 
    18         glTexParameteri(type, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    19          
     6    teximage_func = None 
     7    target = None 
     8 
     9    def __init__(self, size, min_filter=GL_LINEAR, mag_filter=GL_LINEAR): 
     10        self.texture_id = glGenTextures(1) 
     11        glBindTexture(self.target, self.texture_id) 
     12        glTexParameteri(self.target, GL_TEXTURE_MAG_FILTER, mag_filter) 
     13        glTexParameteri(self.target, GL_TEXTURE_MIN_FILTER, min_filter) 
     14        teximage_args = [self.target, 0, GL_RGB] + list(size) + [0, GL_RGB, 
     15                GL_UNSIGNED_BYTE, None] 
     16        self.teximage_func(*teximage_args) 
     17 
     18    def bind(self): 
     19        glBindTexture(self.target, self.texture_id)         
     20         
    2021    def __del__(self): 
    21         super(Texture, self).__del__() 
    22         glDeleteTextures(1, self.texture_id) 
     22        glDeleteTextures([self.texture_id]) 
    2323         
    2424         
    2525class Texture3D(Texture): 
    26     def __init__(self, size, min_filter=GL_LINEAR, mag_filter=GL_LINEAR): 
    27         super(Texture3D, self).__init__(size, GL_TEXTURE_3D, min_filter, 
    28             mag_filter) 
     26    teximage_func = glTexImage3D 
     27    target = GL_TEXTURE_3D 
     28 
    2929                     
    3030class Texture2D(Texture): 
    31     def __init__(self, size, min_filter=GL_LINEAR, mag_filter=GL_LINEAR): 
    32         super(Texture2D, self).__init__(size, GL_TEXTURE_2D, min_filter,  
    33             mag_filter) 
    34              
     31    teximage_func = glTexImage2D 
     32    target = GL_TEXTURE_2D 
     33 
     34 
    3535class Texture1D(Texture): 
    36     def __init__(self, size, min_filter=GL_LINEAR, mag_filter=GL_LINEAR): 
    37         super(Texture1D, self).__init__(size, GL_TEXTURE_1D, min_filter, 
    38             mag_filter) 
     36    teximage_func = glTexImage1D 
     37    target = GL_TEXTURE_1D 
  • palette/trunk/palette/plugins/moire/__init__.py

    r5964203 rbfad342  
    22from OpenGL.GL import * 
    33from OpenGL.GLU import * 
     4from encode import ScreenEncoder 
    45 
    56 
     
    2021    "elements_resolution": "integer(from=3, to=1024, default=256)", 
    2122    "line_width": "float(from=0.05, to=150.0, increment=0.1, default=3.4)", 
    22     "mode": "enum(values=lines|circles|spiral, default=lines)", 
     23    "mode": "enum(values=lines|circles|spiral|dynamic, default=dynamic)", 
     24    "encoder_steps": "integer(from=2, to=50, default=5)", 
    2325} 
    2426 
     
    2931    "spiral": None, 
    3032} 
     33encoder = None 
    3134 
    3235 
    3336def setup(): 
    34     global display_lists_base, display_lists 
     37    global display_lists_base, display_lists, encoder 
    3538    display_lists_base = glGenLists(len(display_lists)) 
    3639    for i, dl_id in enumerate(display_lists): 
     
    3942 
    4043def tear_down(): 
    41     global display_lists_base, display_lists 
    4244    glDeleteLists(display_lists_base, len(display_lists)) 
    4345 
    4446 
    4547def parameters_changed(parameters): 
    46     global display_lists_base, display_lists 
     48    global encoder 
    4749    glNewList(display_lists["circle"], GL_COMPILE) 
    4850    glBegin(GL_LINE_LOOP) 
     
    6264    glEnd()     
    6365    glEndList() 
     66    encoder = ScreenEncoder(parameters["encoder_steps"], (512, 512)) 
    6467 
    6568 
    6669def render(p, canvas, parameters, frame, time): 
    67     global display_lists_base, display_lists 
    6870    # Setup a 2D transformation 
    6971    glMatrixMode(GL_PROJECTION) 
     
    7375    # Enable antialiasing 
    7476    glEnable(GL_LINE_SMOOTH) 
    75     glEnable(GL_BLEND); 
     77    glEnable(GL_BLEND) 
    7678    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
    7779    glHint(GL_LINE_SMOOTH_HINT, GL_NICEST) 
     80    glShadeModel(GL_SMOOTH) 
     81    glDisable(GL_TEXTURE_2D) 
    7882    # Clear screen 
    7983    glClearColor(1, 1, 1, 0) 
     
    99103                parameters["elements_resolution"]) 
    100104    elif parameters["mode"] == "spiral": 
     105        #scale = canvas.size[0] *0.9 
    101106        glLoadIdentity() 
     107        glTranslate(canvas.center[0], canvas.center[0]) 
     108        #glScale(scale, scale, scale) 
    102109        spiral() 
    103110        glLoadIdentity() 
    104111        amp_x = sin(time * 0.7657) * parameters["amplitude"] 
    105112        amp_y = cos(time * 0.25687) * parameters["amplitude"] 
    106         glTranslate(cos(time) * amp_x, sin(time) * amp_y, 0) 
     113        glTranslate(canvas.center[0] + cos(time) * amp_x,  
     114                canvas.center[1] + sin(time) * amp_y, 0) 
     115        #glScale(scale, scale, scale) 
    107116        spiral() 
    108          
     117    elif parameters["mode"] == "dynamic": 
     118        encoder.begin_frame() 
     119        glLoadIdentity() 
     120        frame = frame % encoder.num_frames 
     121        a = float(frame) / encoder.num_frames * 2.0 * pi 
     122        x = parameters["amplitude"] * cos(a) + canvas.center[0] 
     123        y = parameters["amplitude"] * sin(a) + canvas.center[1] 
     124        glTranslate(x, y, 0) 
     125        glScale(100, 100, 1) 
     126        glBegin(GL_TRIANGLE_FAN) 
     127        glVertex2f(0, 0) 
     128        for i in range(10): 
     129            alpha = float(i) / 5.0 * pi 
     130            x = cos(alpha) 
     131            y = sin(alpha) 
     132            glVertex2f(x, y) 
     133        glVertex2f(1, 0) 
     134        glEnd() 
     135        encoder.end_frame() 
     136        if encoder.complete: 
     137            encoder.render_base() 
     138            glLoadIdentity()             
     139            glTranslate((time * 30.0) % encoder.num_frames, 0, 0) 
     140            encoder.render_mask() 
    109141 
    110142 
Note: See TracChangeset for help on using the changeset viewer.