Mercurial > code > home > repos > light9
annotate lightsim/openglsim.py @ 345:839545f174d3
add drawPixels version
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sat, 09 Jun 2007 06:02:52 +0000 |
parents | f866d4dec57b |
children | a08882a05d29 |
rev | line source |
---|---|
0 | 1 # see http://www.sgi.com/software/opengl/advanced97/notes/node57.html for accum notes |
2 | |
341 | 3 import sys, time |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
4 import numarray as num |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
5 |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
6 |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
7 sys.path.append("/usr/lib/python2.4/site-packages/OpenGL/Tk/linux2-tk8.4") |
0 | 8 from OpenGL.GL import * |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
9 import Togl |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
10 import Tkinter as tk |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
11 |
341 | 12 import Image |
13 | |
14 def drawWithAlpha(imgString, w, h, alpha): | |
15 """without opengl extensions""" | |
16 t = time.time() | |
17 ar = num.reshape(num.fromstring(imgString, dtype='uint8'), | |
18 (w * h, 4)) | |
19 print " tonum", time.time() - t | |
20 ar[:,3] *= alpha | |
21 | |
22 print " scl", time.time() - t | |
23 glDrawPixels(w, h, | |
24 GL_RGBA, GL_UNSIGNED_BYTE, ar.tostring()) | |
25 print " draw", time.time() - t | |
26 | |
0 | 27 |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
28 def drawWithAlpha(imgString, w, h, alpha): |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
29 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
30 |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
31 glClear(GL_COLOR_BUFFER_BIT) |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
32 #glBlendColor(1, 1, 1, mag) # needs ARB_imaging |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
33 glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, imgString) |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
34 |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
35 |
0 | 36 class Surface: |
37 def Display(self, event=None): | |
341 | 38 assert 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS).split() |
39 | |
0 | 40 glClearColor(0.0, 0.0, 0.0, 0) |
41 glClear( GL_COLOR_BUFFER_BIT |GL_ACCUM_BUFFER_BIT) | |
341 | 42 glEnable(GL_BLEND) |
43 glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA) | |
0 | 44 l=glGenLists(1) |
45 glNewList(l,GL_COMPILE) | |
46 glEndList() | |
47 | |
48 # glDrawBuffer(GL_BACK) | |
49 | |
341 | 50 for x, img in enumerate(self.image): |
0 | 51 mag = self.scales[x].get() |
52 print "pic %i at %f" % (x,mag) | |
341 | 53 drawWithAlpha(img, self.imageWidth, self.imageHeight, mag) |
54 | |
0 | 55 |
341 | 56 ## if x==0: |
57 ## glAccum(GL_LOAD,mag) | |
58 ## else: | |
59 ## glAccum(GL_ACCUM,mag) | |
0 | 60 |
61 # glAccum(GL_ADD,self.x) | |
62 self.x=(self.x+.1)%2.0 | |
341 | 63 ## glAccum(GL_RETURN,1) |
0 | 64 |
65 def SetupWindow(self): | |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
66 self.OglFrame = tk.Frame() |
0 | 67 self.OglFrame.pack(side = 'top',fill='both',expand=1) |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
68 self.QuitButton = tk.Button(self.OglFrame, {'text':'Quit'}) |
0 | 69 self.QuitButton.bind('<ButtonRelease-1>', sys.exit) |
70 self.QuitButton.pack({'side':'top'}) | |
71 | |
72 | |
73 def SetupOpenGL(self): | |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
74 self.ogl = Togl.Opengl(master=self.OglFrame, width = 512, height = 270, double = 1, depth = 0) |
0 | 75 self.ogl.pack(side = 'top', expand = 1, fill = 'both') |
76 self.ogl.set_centerpoint(0, 0, 0) | |
77 self.ogl.redraw = self.Display | |
78 | |
79 for x in range(0,2): | |
80 self.scales[x] = Scale(self.OglFrame,label="s%i"%x,from_=0,to=1,res=.05,orient='horiz',command=self.ogl.tkRedraw) | |
81 self.scales[x].pack() | |
82 | |
83 | |
84 def __init__(self): | |
85 self.x=0 | |
86 self.scales=[None,None] | |
87 | |
88 self.SetupWindow() | |
89 | |
90 self.image=[] | |
341 | 91 for filename in ('skyline/bg.png', 'skyline/cyc-lo-red.png'): |
92 im = Image.open(filename) | |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
93 #im.thumbnail((200, 200)) |
0 | 94 self.imageWidth = im.size[0] |
95 self.imageHeight = im.size[1] | |
341 | 96 self.image.append(im.convert("RGBA").tostring())#"raw", "RGB", 0, -1)) |
0 | 97 print self.imageWidth, self.imageHeight, self.imageWidth * self.imageHeight*4, len(self.image) |
98 | |
99 self.SetupOpenGL() | |
100 | |
101 glDisable(GL_CULL_FACE) | |
102 # glEnable(GL_DEPTH_TEST) | |
103 # glEnable(GL_NORMALIZE) | |
104 glShadeModel(GL_FLAT) | |
345
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
105 print 'GL_ARB_imaging', 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS) |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
106 import OpenGL |
839545f174d3
add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents:
341
diff
changeset
|
107 print OpenGL.__version__ |
0 | 108 |
109 self.ogl.tkRedraw() | |
110 self.ogl.mainloop() | |
111 | |
112 if __name__ == '__main__': | |
113 Surface() | |
114 | |
115 demo = Surface |