home *** CD-ROM | disk | FTP | other *** search
- """Wrapper/Implementation of the GLU quadrics object for PyOpenGL"""
- from OpenGL.raw import GLU as simple
- from OpenGL.platform import GLU,createBaseFunction, PLATFORM
- import ctypes
-
- class GLUQuadric( simple.GLUquadric ):
- """Implementation class for GLUQuadric classes in PyOpenGL"""
- FUNCTION_TYPE = PLATFORM.functionTypeFor(PLATFORM.GLU)
- CALLBACK_TYPES = {
- # mapping from "which" GLU enumeration to a ctypes function type
- simple.GLU_ERROR : FUNCTION_TYPE( None, simple.GLenum )
- }
- def addCallback( self, which, function ):
- """Register a callback for the quadric object
-
- At the moment only GLU_ERROR is supported by OpenGL, but
- we allow for the possibility of more callbacks in the future...
- """
- callbackType = self.CALLBACK_TYPES.get( which )
- if not callbackType:
- raise ValueError(
- """Don't have a registered callback type for %r"""%(
- which,
- )
- )
- if not isinstance( function, callbackType ):
- cCallback = callbackType( function )
- else:
- cCallback = function
- GLU.gluQuadricCallback( self, which, cCallback )
- # XXX catch errors!
- if getattr( self, 'callbacks', None ) is None:
- self.callbacks = {}
- self.callbacks[ which ] = cCallback
- return cCallback
- GLUquadric = GLUQuadric
-
- def gluQuadricCallback( quadric, which=simple.GLU_ERROR, function=None ):
- """Set the GLU error callback function"""
- return quadric.addCallback( which, function )
-
- # Override to produce instances of the sub-class...
- gluNewQuadric = createBaseFunction(
- 'gluNewQuadric', dll=GLU, resultType=ctypes.POINTER(GLUQuadric),
- argTypes=[],
- doc="""gluNewQuadric( ) -> GLUQuadric
-
- Create a new GLUQuadric object""",
- argNames=[],
- )
-
- __all__ = (
- 'gluNewQuadric',
- 'gluQuadricCallback',
- 'GLUQuadric',
- )
-