Changeset bfad34229eccba8d964a27a0fb3a2084c612a7b9
- Timestamp:
- 09/24/08 06:28:06 (3 years ago)
- Children:
- 1b0cdd33d70957213349cfa0cae373c7350c73a5
- Parents:
- 206d95c9b3331ad20b32a8ff1c5e9666a2029a28
- git-committer:
- flupke <flupke@…> (09/24/08 06:28:06)
- Location:
- palette/trunk/palette
- Files:
-
- 1 added
- 3 edited
- 1 moved
-
canvas/backends/glut_backend.py (modified) (2 diffs)
-
gl/offscreen.py (modified) (1 diff)
-
gl/texture.py (modified) (1 diff)
-
plugins/moire/__init__.py (moved) (moved from palette/trunk/palette/plugins/moire.py) (7 diffs)
-
plugins/moire/encode.py (added)
Legend:
- Unmodified
- Added
- Removed
-
palette/trunk/palette/canvas/backends/glut_backend.py
r206d95c rbfad342 19 19 glutInit() 20 20 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) 21 glutInitWindowSize(*self.size) 21 22 self.window_id = glutCreateWindow("Palette") 22 23 glutDisplayFunc(self.update) … … 31 32 def resize(self, size): 32 33 super(Canvas, self).resize(size) 33 glutInitWindowSize(*self.size)34 34 glViewport(0, 0, *size) 35 35 -
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]) -
palette/trunk/palette/gl/texture.py
r206d95c rbfad342 1 1 from 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 2 import Image 9 3 10 4 11 5 class 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 20 21 def __del__(self): 21 super(Texture, self).__del__() 22 glDeleteTextures(1, self.texture_id) 22 glDeleteTextures([self.texture_id]) 23 23 24 24 25 25 class 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 29 29 30 30 class 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 35 35 class 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 2 2 from OpenGL.GL import * 3 3 from OpenGL.GLU import * 4 from encode import ScreenEncoder 4 5 5 6 … … 20 21 "elements_resolution": "integer(from=3, to=1024, default=256)", 21 22 "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)", 23 25 } 24 26 … … 29 31 "spiral": None, 30 32 } 33 encoder = None 31 34 32 35 33 36 def setup(): 34 global display_lists_base, display_lists 37 global display_lists_base, display_lists, encoder 35 38 display_lists_base = glGenLists(len(display_lists)) 36 39 for i, dl_id in enumerate(display_lists): … … 39 42 40 43 def tear_down(): 41 global display_lists_base, display_lists42 44 glDeleteLists(display_lists_base, len(display_lists)) 43 45 44 46 45 47 def parameters_changed(parameters): 46 global display_lists_base, display_lists48 global encoder 47 49 glNewList(display_lists["circle"], GL_COMPILE) 48 50 glBegin(GL_LINE_LOOP) … … 62 64 glEnd() 63 65 glEndList() 66 encoder = ScreenEncoder(parameters["encoder_steps"], (512, 512)) 64 67 65 68 66 69 def render(p, canvas, parameters, frame, time): 67 global display_lists_base, display_lists68 70 # Setup a 2D transformation 69 71 glMatrixMode(GL_PROJECTION) … … 73 75 # Enable antialiasing 74 76 glEnable(GL_LINE_SMOOTH) 75 glEnable(GL_BLEND) ;77 glEnable(GL_BLEND) 76 78 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 77 79 glHint(GL_LINE_SMOOTH_HINT, GL_NICEST) 80 glShadeModel(GL_SMOOTH) 81 glDisable(GL_TEXTURE_2D) 78 82 # Clear screen 79 83 glClearColor(1, 1, 1, 0) … … 99 103 parameters["elements_resolution"]) 100 104 elif parameters["mode"] == "spiral": 105 #scale = canvas.size[0] *0.9 101 106 glLoadIdentity() 107 glTranslate(canvas.center[0], canvas.center[0]) 108 #glScale(scale, scale, scale) 102 109 spiral() 103 110 glLoadIdentity() 104 111 amp_x = sin(time * 0.7657) * parameters["amplitude"] 105 112 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) 107 116 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() 109 141 110 142
Note: See TracChangeset
for help on using the changeset viewer.
