Thread: [PyOpenGL-Users] PyOpenGL-3.0.0a5 is now available
Brought to you by:
mcfletch
From: Mike C. F. <mcf...@vr...> - 2006-11-22 22:17:11
|
I've just uploaded the next alpha release of PyOpenGL 3.x. This release includes the "raw" package hierarchy with the auto-generated wrappers available for those who want to do low-level hacking. It also has wrappers for OpenGL 1.2, 1.3, 1.4, 1.5 and 2.0 (though only 1.2 and 1.3 have been looked at for usability, expect some usability-focused API changes in the higher versions). There are also a number of small bug-fixes throughout. This is still a rather early alpha. We're missing big tracts of functionality, such as the AGL and WGL libraries (we do have raw XGL support). There is lots of work still to be done and we would love to see your patches to get your favourite bit of the package working. Bug reports, reports of success/failure and the like are also useful. We haven't even begun to optimise the code, btw, so expect it to be very slow. For users: http://pyopengl.sourceforge.net/ctypes/using.html For developers (and remember, one of the major points of re-implementing in pure Python is to make it easier to become a contributor; get involved): http://pyopengl.sourceforge.net/ctypes/development.html We could really use people testing the weird and exotic platforms (e.g. Windows, OS-X) and/or porting to other systems (e.g. DOS, HPUX, Solaris, *BSD, Irix and the like). Porting to your platform is just a matter of writing a simple Python module. Testing with existing PyOpenGL code-bases to document what needs to be changed when upgrading (or to fix bugs) would also help greatly. Thanks everyone, and have fun, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: red p. <red...@ya...> - 2007-01-10 00:05:37
|
Hello, Everyone, I found a interesting question here. I use the first sample program from chapter 24 from Python How to Program By Harvey M. Deitel, Paul J. Deitel, Jonathan P. Liperi, BA Wiedermann; Prentice Hall, 2002. This program can get correct figure. But I found a interesting thing here. or maybe it is a bug? The run of the program like following "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__ return self.func(*args) File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/Tk/__init__.py",<br /> line 548, in tkExpose self.basic_lighting() File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/Tk/__init__.py",<br /> line 323, in basic_lighting glLightfv(GL_LIGHT0, GL_POSITION, light_position) File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/wrapper.py", line 664, in wrapperCall pyArgs.append( converter(arg, self, args) ) File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/converters.py",<br /> line 113, in __call__ return self.function( incoming ) File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/arrays/arraydatatype.py",<br /> line 52, in asArray return cls.getHandler(value).asArray( value, typeCode or cls.typeConstant ) File "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/arrays/arraydatatype.py Ok, The interesting thing happen here in try block in this file in line 18 Handler = cls.TYPE_REGISTRY.get(typ) In my machine, the first time, Handler equal nothing and jump out the try block and return, and then execute this function again, get correct Handler value and show right figure. The key problem is here. The source code works well, but once I compiled it with Cx_freeze. The executable doesn't work. Anybody can clear this for me? for your convenience, I attach the source code here. ######################################### # Fig 24.1: fig24_01.py # Colored, rotating box (with open top and bottom). from Tkinter import * from OpenGL.GL import * from OpenGL.Tk import * class ColorBox( Frame ): """A colorful, rotating box""" def __init__( self ): """Initialize GUI and OpenGL""" Frame.__init__( self ) self.master.title( "Color Box" ) self.master.geometry( "300x300" ) self.pack( expand = YES, fill = BOTH ) # create and pack Opengl -- use double buffering self.openGL = Opengl( self, double = 1 ) self.openGL.pack( expand = YES, fill = BOTH ) self.openGL.redraw = self.redraw # set redraw function self.openGL.set_eyepoint( 30 ) # move away from object self.amountRotated = 0 # total degrees of rotation self.increment = 2 # rotate amount in degrees self.update() # begin rotation def redraw( self, openGL ): """Draw box on black background""" # clear background and disable lighting glClearColor( 1.0, 1.0, 1.0, 0.0 ) # set clearing color glClear( GL_COLOR_BUFFER_BIT ) # clear background glDisable( GL_LIGHTING ) # constants red = ( 1.0, 0.0, 0.0 ) green = ( 0.0, 1.0, 0.0 ) blue = ( 0.0, 0.0, 1.0 ) purple = ( 1.0, 0.0, 1.0 ) vertices = \ [ ( ( -3.0, 3.0, -3.0 ), red ), ( ( -3.0, -3.0, -3.0 ), green ), ( ( 3.0, 3.0, -3.0 ), blue ), ( ( 3.0, -3.0, -3.0 ), purple ), ( ( 3.0, 3.0, 3.0 ), red ), ( ( 3.0, -3.0, 3.0 ), green ), ( ( -3.0, 3.0, 3.0 ), blue ), ( ( -3.0, -3.0, 3.0 ), purple ), ( ( -3.0, 3.0, -3.0 ), red ), ( ( -3.0, -3.0, -3.0 ), green ) ] glBegin( GL_QUAD_STRIP ) # begin drawing # change color and plot point for each vertex for vertex in vertices: location, color = vertex apply( glColor3f, color ) apply( glVertex3f, location ) glEnd() # stop drawing def update( self ): """Rotate box""" if self.amountRotated >= 500: # change rotation direction self.increment = -2 # rotate left elif self.amountRotated <= 0: # change rotation direction self.increment = 2 # rotate right # rotate box around x, y, z axis ( 1.0, 1.0, 1.0 ) glRotate( self.increment, 1.0, 1.0, 1.0 ) self.amountRotated += self.increment self.openGL.tkRedraw() # redraw geometry self.openGL.after( 10, self.update ) # call update in 10ms def main(): ColorBox().mainloop() if __name__ == "__main__": main() ################################# I add two print line in "/usr/lib/python2.4/site-packages/OpenGL-3.0.0a4-py2.4.egg/OpenGL/arrays/arraydatatype.py" and get following 0 return 0 <Opengl.arrays.numpymodule.NumpyHandler Object at 0x8ae0fcc> return ######################### handler = 0; try: print handler handler = cls.TYPE_REGISTRY.get( typ ) print handler except AttributeError, err: formathandler.FormatHandler.loadAll() cls.TYPE_REGISTRY = formathandler.FormatHandler.TYPE_REGISTRY handler = cls.TYPE_REGISTRY.get( typ ) if handler is None: if hasattr( typ, '__mro__' ): for base in typ.__mro__: if cls.TYPE_REGISTRY.has_key( base ): handler = cls.TYPE_REGISTRY[ base ] handler.registerEquivalent( typ, base ) cls.TYPE_REGISTRY[ typ ] = handler return handler raise TypeError( """No array-type handler for type %r (value: %s) registered"""%( typ, repr(value)[:50] ) ) print "return" return handler ########################## Thanks, John __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com |
From: Mike C. F. <mcf...@vr...> - 2007-01-11 06:56:35
|
red puck wrote: > Hello, Everyone, > > I found a interesting question here. > > I use the first sample program from chapter 24 from > Python How to Program By Harvey M. Deitel, Paul J. > Deitel, Jonathan P. Liperi, BA Wiedermann; Prentice > Hall, 2002. > > This program can get correct figure. But I found a > interesting thing here. or maybe it is a bug? > > The run of the program like following > ... > The key problem is here. The source code works well, > but once I compiled it with Cx_freeze. The executable > doesn't work. > > Anybody can clear this for me? > I can clear up the "why", but don't yet have a solution. Basically, the various application-building systems, such as py2app, py2exe and cx_freeze don't yet support the setuptools/egg format properly. They neglect to properly register the bundled-up eggs, so the setuptools-based plugin code (which handles the array formats) never gets registered or invoked. At the moment I have no solution for this. I'm planning to sit down at some point and try to figure out a patch for the various tools, but my available time for OpenGL hacking is minimal these days and I'm still focused on the core functionality, more than the packaging issues. I *believe* with certain approaches with py2exe it should be possible to exclude the library entirely and then just drop the .egg into the application's distribution directory, but I haven't tried that and haven't confirmed that my understanding is correct. I'm guessing you would need to be sure that setuptools is included in the bundle as well, btw. Good luck, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |