Viewing file: multi_draw_arrays.py (2.25 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
'''OpenGL extension EXT.multi_draw_arrays
This module customises the behaviour of the OpenGL.raw.GL.EXT.multi_draw_arrays to provide a more Python-friendly API
Overview (from the spec) These functions behave identically to the standard OpenGL 1.1 functions glDrawArrays() and glDrawElements() except they handle multiple lists of vertices in one call. Their main purpose is to allow one function call to render more than one primitive such as triangle strip, triangle fan, etc.
The official definition of this extension is available here: http://www.opengl.org/registry/specs/EXT/multi_draw_arrays.txt ''' from OpenGL import platform, constants, constant, arrays from OpenGL import extensions, wrapper from OpenGL.GL import glget import ctypes from OpenGL.raw.GL.EXT.multi_draw_arrays import * ### END AUTOGENERATED SECTION from OpenGL.lazywrapper import lazy from OpenGL.GL.pointers import glDrawElements
@lazy( glMultiDrawElementsEXT ) def glMultiDrawElementsEXT(baseOperation, primtype, counts, typ, indices, primcount=None): """Currently glMultiDrawElementsEXT is not working in the wrapper We are replacing the code with a sequence of glDrawElements calls as per the spec for the function. Basically we'd spend more effort making an array of array pointers than we would creating a simple iteration in Python. """ if primcount is not None: for i in xrange( primcount ): glDrawElements( primtype, counts[i], typ, indices[i] ) else: for c,i in zip( counts, indices ): glDrawElements( primtype, c, typ, i )
#def convertIndices( arg, wrappedOperation, args ): # """Convert indices to an array of arrays""" # return [ # arrays.ArrayDatatype.asArray( element, args[2] ) # for element in arg # ] #def resolveIndices( value ): # pointers = [] # for v in value: # pointers.append( arrays.ArrayDatatype.voidDataPointer( v ) ) # typ = ctypes.POINTER(None) * len(value) # return typ( *pointers ) # #glMultiDrawElementsEXT = wrapper.wrapper( glMultiDrawElementsEXT ).setPyConverter( # 'indices', convertIndices, #).setCResolver( # 'indices', resolveIndices, #).setPyConverter( # 'count', arrays.AsArrayTyped( 'count', arrays.GLsizeiArray ), #).setCResolver( # 'count', arrays.ArrayDatatype.voidDataPointer , #)
|