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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 # see http://www.sgi.com/software/opengl/advanced97/notes/node57.html for accum notes
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
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
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
12 import Image
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
13
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
14 def drawWithAlpha(imgString, w, h, alpha):
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
15 """without opengl extensions"""
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
16 t = time.time()
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
17 ar = num.reshape(num.fromstring(imgString, dtype='uint8'),
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
18 (w * h, 4))
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
19 print " tonum", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
20 ar[:,3] *= alpha
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
21
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
22 print " scl", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
23 glDrawPixels(w, h,
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
24 GL_RGBA, GL_UNSIGNED_BYTE, ar.tostring())
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
25 print " draw", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
26
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 class Surface:
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 def Display(self, event=None):
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
38 assert 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS).split()
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
39
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 glClearColor(0.0, 0.0, 0.0, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 glClear( GL_COLOR_BUFFER_BIT |GL_ACCUM_BUFFER_BIT)
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
42 glEnable(GL_BLEND)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
43 glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 l=glGenLists(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 glNewList(l,GL_COMPILE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 glEndList()
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 # glDrawBuffer(GL_BACK)
45b12307c695 Initial revision
drewp
parents:
diff changeset
49
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
50 for x, img in enumerate(self.image):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 mag = self.scales[x].get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 print "pic %i at %f" % (x,mag)
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
53 drawWithAlpha(img, self.imageWidth, self.imageHeight, mag)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
54
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
55
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
56 ## if x==0:
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
57 ## glAccum(GL_LOAD,mag)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
58 ## else:
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
59 ## glAccum(GL_ACCUM,mag)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
60
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 # glAccum(GL_ADD,self.x)
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 self.x=(self.x+.1)%2.0
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
63 ## glAccum(GL_RETURN,1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 def SetupWindow(self):
345
839545f174d3 add drawPixels version
Drew Perttula <drewp@bigasterisk.com>
parents: 341
diff changeset
66 self.OglFrame = tk.Frame()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 self.QuitButton.bind('<ButtonRelease-1>', sys.exit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 self.QuitButton.pack({'side':'top'})
45b12307c695 Initial revision
drewp
parents:
diff changeset
71
45b12307c695 Initial revision
drewp
parents:
diff changeset
72
45b12307c695 Initial revision
drewp
parents:
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 self.ogl.pack(side = 'top', expand = 1, fill = 'both')
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 self.ogl.set_centerpoint(0, 0, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 self.ogl.redraw = self.Display
45b12307c695 Initial revision
drewp
parents:
diff changeset
78
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 for x in range(0,2):
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 self.scales[x] = Scale(self.OglFrame,label="s%i"%x,from_=0,to=1,res=.05,orient='horiz',command=self.ogl.tkRedraw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 self.scales[x].pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
82
45b12307c695 Initial revision
drewp
parents:
diff changeset
83
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 self.x=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 self.scales=[None,None]
45b12307c695 Initial revision
drewp
parents:
diff changeset
87
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 self.SetupWindow()
45b12307c695 Initial revision
drewp
parents:
diff changeset
89
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 self.image=[]
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
91 for filename in ('skyline/bg.png', 'skyline/cyc-lo-red.png'):
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 self.imageWidth = im.size[0]
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 self.imageHeight = im.size[1]
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
96 self.image.append(im.convert("RGBA").tostring())#"raw", "RGB", 0, -1))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 print self.imageWidth, self.imageHeight, self.imageWidth * self.imageHeight*4, len(self.image)
45b12307c695 Initial revision
drewp
parents:
diff changeset
98
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 self.SetupOpenGL()
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 glDisable(GL_CULL_FACE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 # glEnable(GL_DEPTH_TEST)
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 # glEnable(GL_NORMALIZE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
108
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 self.ogl.tkRedraw()
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 self.ogl.mainloop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
111
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 if __name__ == '__main__':
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 Surface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
114
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 demo = Surface