OpenGL.GL.EXT.direct_state_access
index
/home/mcfletch/pylive/OpenGL/GL/EXT/direct_state_access.py

OpenGL extension EXT.direct_state_access
 
This module customises the behaviour of the 
OpenGL.raw.GL.EXT.direct_state_access to provide a more 
Python-friendly API
 
Overview (from the spec)
        
        This extension introduces a set of new "direct state access"
        commands (meaning no selector is involved) to access (update and
        query) OpenGL state that previously depended on the OpenGL state
        selectors for access.  These new commands supplement the existing
        selector-based OpenGL commands to access the same state.
        
        The intent of this extension is to make it more efficient for
        libraries to avoid disturbing selector and latched state.  The
        extension also allows more efficient command usage by eliminating
        the need for selector update commands.
        
        Two derivative advantages of this extension are 1) display lists
        can be executed using these commands that avoid disturbing selectors
        that subsequent commands may depend on, and 2) drivers implemented
        with a dual-thread partitioning with OpenGL command buffering from
        an application thread and then OpenGL command dispatching in a
        concurrent driver thread can avoid thread synchronization created by
        selector saving, setting, command execution, and selector restoration.
        
        This extension does not itself add any new OpenGL state.
        
        We call a state variable in OpenGL an "OpenGL state selector" or
        simply a "selector" if OpenGL commands depend on the state variable
        to determine what state to query or update.  The matrix mode and
        active texture are both selectors.  Object bindings for buffers,
        programs, textures, and framebuffer objects are also selectors.
        
        We call OpenGL state "latched" if the state is set by one OpenGL
        command but then that state is saved by a subsequent command or the
        state determines how client memory or buffer object memory is accessed
        by a subsequent command.  The array and element array buffer bindings
        are latched by vertex array specification commands to determine
        which buffer a given vertex array uses.  Vertex array state and pixel
        pack/unpack state decides how client memory or buffer object memory is
        accessed by subsequent vertex pulling or image specification commands.
        
        The existence of selectors and latched state in the OpenGL API
        reduces the number of parameters to various sets of OpenGL commands
        but complicates the access to state for layered libraries which seek
        to access state without disturbing other state, namely the state of
        state selectors and latched state.  In many cases, selectors and
        latched state were introduced by extensions as OpenGL evolved to
        minimize the disruption to the OpenGL API when new functionality,
        particularly the pluralization of existing functionality as when
        texture objects and later multiple texture units, was introduced.
        
        The OpenGL API involves several selectors (listed in historical
        order of introduction):
        
          o  The matrix mode.
        
          o  The current bound texture for each supported texture target.
        
          o  The active texture.
        
          o  The active client texture.
        
          o  The current bound program for each supported program target.
        
          o  The current bound buffer for each supported buffer target.
        
          o  The current GLSL program.
        
          o  The current framebuffer object.
        
        The new selector-free update commands can be compiled into display
        lists.
        
        The OpenGL API has latched state for vertex array buffer objects
        and pixel store state.  When an application issues a GL command to
        unpack or pack pixels (for example, glTexImage2D or glReadPixels
        respectively), the current unpack and pack pixel store state
        determines how the pixels are unpacked from/packed to client memory
        or pixel buffer objects.  For example, consider:
        
          glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
          glPixelStorei(GL_UNPACK_ROW_LENGTH, 640);
          glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 47);
          glDrawPixels(100, 100, GL_RGB, GL_FLOAT, pixels);
        
        The unpack swap bytes and row length state set by the preceding
        glPixelStorei commands (as well as the 6 other unpack pixel store
        state variables) control how data is read (unpacked) from buffer of
        data pointed to by pixels.  The glBindBuffer command also specifies
        an unpack buffer object (47) so the pixel pointer is actually treated
        as a byte offset into buffer object 47.
        
        When an application issues a command to configure a vertex array,
        the current array buffer state is latched as the binding for the
        particular vertex array being specified.  For example, consider:
        
          glBindBuffer(GL_ARRAY_BUFFER, 23);
          glVertexPointer(3, GL_FLOAT, 12, pointer);
        
        The glBindBuffer command updates the array buffering binding
        (GL_ARRAY_BUFFER_BINDING) to the buffer object named 23.  The
        subsequent glVertexPointer command specifies explicit parameters
        for the size, type, stride, and pointer to access the position
        vertex array BUT ALSO latches the current array buffer binding for
        the vertex array buffer binding (GL_VERTEX_ARRAY_BUFFER_BINDING).
        Effectively the current array buffer binding buffer object becomes
        an implicit fifth parameter to glVertexPointer and this applies to
        all the gl*Pointer vertex array specification commands.
        
        Selectors and latched state create problems for layered libraries
        using OpenGL because selectors require the selector state to be
        modified to update some other state and latched state means implicit
        state can affect the operation of commands specifying, packing, or
        unpacking data through pointers/offsets.  For layered libraries,
        a state update performed by the library may attempt to save the
        selector state, set the selector, update/query some state the
        selector controls, and then restore the selector to its saved state.
        Layered libraries can skip the selector save/restore but this risks
        introducing uncertainty about the state of a selector after calling
        layered library routines.  Such selector side-effects are difficult
        to document and lead to compatibility issues as the layered library
        evolves or its usage varies.  For latched state, layered libraries
        may find commands such as glDrawPixels do not work as expected
        because latched pixel store state is not what the library expects.
        Querying or pushing the latched state, setting the latched state
        explicitly, performing the operation involving latched state, and
        then restoring or popping the latched state avoids entanglements
        with latched state but at considerable cost.
        
        EXAMPLE USAGE OF THIS EXTENSION'S FUNCTIONALITY
        
        Consider the following routine to set the modelview matrix involving
        the matrix mode selector:
        
          void setModelviewMatrix(const GLfloat matrix[16])
          {
            GLenum savedMatrixMode;
        
            glGetIntegerv(GL_MATRIX_MODE, &savedMatrixMode);
            glMatrixMode(GL_MODELVIEW);
            glLoadMatrixf(matrix);
            glMatrixMode(savedMatrixMode);
          }
        
        Notice that four OpenGL commands are required to update the current
        modelview matrix without disturbing the matrix mode selector.
        
        OpenGL query commands can also substantially reduce the performance
        of modern OpenGL implementations which may off-load OpenGL state
        processing to another CPU core/thread or to the GPU itself.
        
        An alternative to querying the selector is to use the
        glPushAttrib/glPopAttrib commands.  However this approach typically
        involves pushing far more state than simply the one or two selectors
        that need to be saved and restored.  Because so much state is
        associated with a given push/pop attribute bit, the glPushAttrib
        and glPopAttrib commands are considerably more costly than the
        save/restore approach.  Additionally glPushAttrib risks overflowing
        the attribute stack.
        
        The reliability and performance of layered libraries and applications
        can be improved by adding to the OpenGL API a new set of commands
        to access directly OpenGL state that otherwise involves selectors
        to access.
        
        The above example can be reimplemented more efficiently and without
        selector side-effects:
        
          void setModelviewMatrix(const GLfloat matrix[16])
          {
            glMatrixLoadfEXT(GL_MODELVIEW, matrix);
          }
        
        Consider a layered library seeking to load a texture:
        
          void loadTexture(GLint texobj, GLint width, GLint height,
                           void *data)
          {
            glBindTexture(GL_TEXTURE_2D, texobj);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
                         width, height, GL_RGB, GL_FLOAT, data);
          }
        
        The library expects the data to be packed into the buffer pointed
        to by data.  But what if the current pixel unpack buffer binding
        is not zero so the current pixel unpack buffer, rather than client
        memory, will be read?  Or what if the application has modified
        the GL_UNPACK_ROW_LENGTH pixel store state before loadTexture
        is called?  
        
        We can fix the routine by calling glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
        0) and setting all the pixel store unpack state to the initial state
        the loadTexture routine expects, but this is expensive.  It also risks
        disturbing the state so when loadTexture returns to the application,
        the application doesn't realize the current texture object (for
        whatever texture unit the current active texture happens to be) and
        pixel store state has changed.
        
        We can more efficiently implement this routine without disturbing
        selector or latched state as follows:
        
          void loadTexture(GLint texobj, GLint width, GLint height,
                           void *data)
          {
            glPushClientAttribDefaultEXT(GL_CLIENT_PIXEL_STORE_BIT);
            glTextureImage2D(texobj, GL_TEXTURE_2D, 0, GL_RGB8,
                             width, height, GL_RGB, GL_FLOAT, data);
            glPopClientAttrib();
          }
        
        Now loadTexture does not have to worry about inappropriately
        configured pixel store state or a non-zero pixel unpack buffer
        binding.  And loadTexture has no unintended side-effects for
        selector or latched state (assuming the client attrib state does
        not overflow).
 
The official definition of this extension is available here:
http://www.opengl.org/registry/specs/EXT/direct_state_access.txt

 
Modules
       
OpenGL.arrays
OpenGL.constant
OpenGL.constants
ctypes
OpenGL.extensions
OpenGL.GL.glget
OpenGL.platform
OpenGL.wrapper

 
Data
        EXTENSION_NAME = 'GL_EXT_direct_state_access'
GL_PROGRAM_MATRIX_EXT = GL_PROGRAM_MATRIX_EXT
GL_PROGRAM_MATRIX_STACK_DEPTH_EXT = GL_PROGRAM_MATRIX_STACK_DEPTH_EXT
GL_TRANSPOSE_PROGRAM_MATRIX_EXT = GL_TRANSPOSE_PROGRAM_MATRIX_EXT
__file__ = '/home/mcfletch/pylive/OpenGL/GL/EXT/direct_state_access.pyc'
__name__ = 'OpenGL.GL.EXT.direct_state_access'
__package__ = 'OpenGL.GL.EXT'
glBindMultiTextureEXT = <OpenGL.platform.baseplatform.glBindMultiTextureEXT object at 0x7579f90>
glCheckNamedFramebufferStatusEXT = <OpenGL.platform.baseplatform.glCheckNamedFramebufferStatusEXT object at 0x76c5610>
glClientAttribDefaultEXT = <OpenGL.platform.baseplatform.glClientAttribDefaultEXT object at 0x7564f90>
glCompressedMultiTexImage1DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexImage1DEXT object at 0x757df50>
glCompressedMultiTexImage2DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexImage2DEXT object at 0x757ded0>
glCompressedMultiTexImage3DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexImage3DEXT object at 0x757de50>
glCompressedMultiTexSubImage1DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexSubImage1DEXT object at 0x76bd110>
glCompressedMultiTexSubImage2DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexSubImage2DEXT object at 0x76bd090>
glCompressedMultiTexSubImage3DEXT = <OpenGL.platform.baseplatform.glCompressedMultiTexSubImage3DEXT object at 0x757dfd0>
glCompressedTextureImage1DEXT = <OpenGL.platform.baseplatform.glCompressedTextureImage1DEXT object at 0x757dbd0>
glCompressedTextureImage2DEXT = <OpenGL.platform.baseplatform.glCompressedTextureImage2DEXT object at 0x757db50>
glCompressedTextureImage3DEXT = <OpenGL.platform.baseplatform.glCompressedTextureImage3DEXT object at 0x757dad0>
glCompressedTextureSubImage1DEXT = <OpenGL.platform.baseplatform.glCompressedTextureSubImage1DEXT object at 0x757dd50>
glCompressedTextureSubImage2DEXT = <OpenGL.platform.baseplatform.glCompressedTextureSubImage2DEXT object at 0x757dcd0>
glCompressedTextureSubImage3DEXT = <OpenGL.platform.baseplatform.glCompressedTextureSubImage3DEXT object at 0x757dc50>
glCopyMultiTexImage1DEXT = <OpenGL.platform.baseplatform.glCopyMultiTexImage1DEXT object at 0x7579990>
glCopyMultiTexImage2DEXT = <OpenGL.platform.baseplatform.glCopyMultiTexImage2DEXT object at 0x7579a10>
glCopyMultiTexSubImage1DEXT = <OpenGL.platform.baseplatform.glCopyMultiTexSubImage1DEXT object at 0x7579a90>
glCopyMultiTexSubImage2DEXT = <OpenGL.platform.baseplatform.glCopyMultiTexSubImage2DEXT object at 0x7579b10>
glCopyMultiTexSubImage3DEXT = <OpenGL.platform.baseplatform.glCopyMultiTexSubImage3DEXT object at 0x7579f10>
glCopyTextureImage1DEXT = <OpenGL.platform.baseplatform.glCopyTextureImage1DEXT object at 0x7576f50>
glCopyTextureImage2DEXT = <OpenGL.platform.baseplatform.glCopyTextureImage2DEXT object at 0x7576fd0>
glCopyTextureSubImage1DEXT = <OpenGL.platform.baseplatform.glCopyTextureSubImage1DEXT object at 0x7579090>
glCopyTextureSubImage2DEXT = <OpenGL.platform.baseplatform.glCopyTextureSubImage2DEXT object at 0x7579110>
glCopyTextureSubImage3DEXT = <OpenGL.platform.baseplatform.glCopyTextureSubImage3DEXT object at 0x7579510>
glDisableClientStateIndexedEXT = <OpenGL.platform.baseplatform.glDisableClientStateIndexedEXT object at 0x757d0d0>
glEnableClientStateIndexedEXT = <OpenGL.platform.baseplatform.glEnableClientStateIndexedEXT object at 0x757d050>
glFramebufferDrawBufferEXT = <OpenGL.platform.baseplatform.glFramebufferDrawBufferEXT object at 0x76c5a10>
glFramebufferDrawBuffersEXT = <OpenGL.platform.baseplatform.glFramebufferDrawBuffersEXT object at 0x76c5a90>
glFramebufferReadBufferEXT = <OpenGL.platform.baseplatform.glFramebufferReadBufferEXT object at 0x76c5b10>
glGenerateMultiTexMipmapEXT = <OpenGL.platform.baseplatform.glGenerateMultiTexMipmapEXT object at 0x76c5990>
glGenerateTextureMipmapEXT = <OpenGL.platform.baseplatform.glGenerateTextureMipmapEXT object at 0x76c5910>
glGetCompressedMultiTexImageEXT = <OpenGL.platform.baseplatform.glGetCompressedMultiTexImageEXT object at 0x76bd190>
glGetCompressedTextureImageEXT = <OpenGL.platform.baseplatform.glGetCompressedTextureImageEXT object at 0x757ddd0>
glGetDoubleIndexedvEXT = <OpenGL.platform.baseplatform.glGetDoubleIndexedvEXT object at 0x757d9d0>
glGetFloatIndexedvEXT = <OpenGL.platform.baseplatform.glGetFloatIndexedvEXT object at 0x757d950>
glGetFramebufferParameterivEXT = <OpenGL.platform.baseplatform.glGetFramebufferParameterivEXT object at 0x76c5b90>
glGetMultiTexEnvfvEXT = <OpenGL.platform.baseplatform.glGetMultiTexEnvfvEXT object at 0x757d6d0>
glGetMultiTexEnvivEXT = <OpenGL.platform.baseplatform.glGetMultiTexEnvivEXT object at 0x757d750>
glGetMultiTexGendvEXT = <OpenGL.platform.baseplatform.glGetMultiTexGendvEXT object at 0x757d7d0>
glGetMultiTexGenfvEXT = <OpenGL.platform.baseplatform.glGetMultiTexGenfvEXT object at 0x757d850>
glGetMultiTexGenivEXT = <OpenGL.platform.baseplatform.glGetMultiTexGenivEXT object at 0x757d8d0>
glGetMultiTexImageEXT = <OpenGL.platform.baseplatform.glGetMultiTexImageEXT object at 0x7579b90>
glGetMultiTexLevelParameterfvEXT = <OpenGL.platform.baseplatform.glGetMultiTexLevelParameterfvEXT object at 0x7579d10>
glGetMultiTexLevelParameterivEXT = <OpenGL.platform.baseplatform.glGetMultiTexLevelParameterivEXT object at 0x7579d90>
glGetMultiTexParameterIivEXT = <OpenGL.platform.baseplatform.glGetMultiTexParameterIivEXT object at 0x76bde10>
glGetMultiTexParameterIuivEXT = <OpenGL.platform.baseplatform.glGetMultiTexParameterIuivEXT object at 0x76bde90>
glGetMultiTexParameterfvEXT = <OpenGL.platform.baseplatform.glGetMultiTexParameterfvEXT object at 0x7579c10>
glGetMultiTexParameterivEXT = <OpenGL.platform.baseplatform.glGetMultiTexParameterivEXT object at 0x7579c90>
glGetNamedBufferParameterivEXT = <OpenGL.platform.baseplatform.glGetNamedBufferParameterivEXT object at 0x76c5290>
glGetNamedBufferPointervEXT = <OpenGL.platform.baseplatform.glGetNamedBufferPointervEXT object at 0x76c5310>
glGetNamedBufferSubDataEXT = <OpenGL.platform.baseplatform.glGetNamedBufferSubDataEXT object at 0x76c5390>
glGetNamedFramebufferAttachmentParameterivEXT = <OpenGL.platform.baseplatform.glGetNamedFramebufferAttachmentParameterivEXT object at 0x76c5890>
glGetNamedProgramLocalParameterIivEXT = <OpenGL.platform.baseplatform.glGetNamedProgramLocalParameterIivEXT object at 0x76bda10>
glGetNamedProgramLocalParameterIuivEXT = <OpenGL.platform.baseplatform.glGetNamedProgramLocalParameterIuivEXT object at 0x76bda90>
glGetNamedProgramLocalParameterdvEXT = <OpenGL.platform.baseplatform.glGetNamedProgramLocalParameterdvEXT object at 0x76bd490>
glGetNamedProgramLocalParameterfvEXT = <OpenGL.platform.baseplatform.glGetNamedProgramLocalParameterfvEXT object at 0x76bd510>
glGetNamedProgramStringEXT = <OpenGL.platform.baseplatform.glGetNamedProgramStringEXT object at 0x76bd610>
glGetNamedProgramivEXT = <OpenGL.platform.baseplatform.glGetNamedProgramivEXT object at 0x76bd590>
glGetNamedRenderbufferParameterivEXT = <OpenGL.platform.baseplatform.glGetNamedRenderbufferParameterivEXT object at 0x76c5590>
glGetPointerIndexedvEXT = <OpenGL.platform.baseplatform.glGetPointerIndexedvEXT object at 0x757da50>
glGetTextureImageEXT = <OpenGL.platform.baseplatform.glGetTextureImageEXT object at 0x7579190>
glGetTextureLevelParameterfvEXT = <OpenGL.platform.baseplatform.glGetTextureLevelParameterfvEXT object at 0x7579310>
glGetTextureLevelParameterivEXT = <OpenGL.platform.baseplatform.glGetTextureLevelParameterivEXT object at 0x7579390>
glGetTextureParameterIivEXT = <OpenGL.platform.baseplatform.glGetTextureParameterIivEXT object at 0x76bdc10>
glGetTextureParameterIuivEXT = <OpenGL.platform.baseplatform.glGetTextureParameterIuivEXT object at 0x76bdc90>
glGetTextureParameterfvEXT = <OpenGL.platform.baseplatform.glGetTextureParameterfvEXT object at 0x7579210>
glGetTextureParameterivEXT = <OpenGL.platform.baseplatform.glGetTextureParameterivEXT object at 0x7579290>
glMapNamedBufferEXT = <OpenGL.platform.baseplatform.glMapNamedBufferEXT object at 0x76c5110>
glMatrixFrustumEXT = <OpenGL.platform.baseplatform.glMatrixFrustumEXT object at 0x75766d0>
glMatrixLoadIdentityEXT = <OpenGL.platform.baseplatform.glMatrixLoadIdentityEXT object at 0x7576390>
glMatrixLoadTransposedEXT = <OpenGL.platform.baseplatform.glMatrixLoadTransposedEXT object at 0x75769d0>
glMatrixLoadTransposefEXT = <OpenGL.platform.baseplatform.glMatrixLoadTransposefEXT object at 0x7576950>
glMatrixLoaddEXT = <OpenGL.platform.baseplatform.glMatrixLoaddEXT object at 0x7560650>
glMatrixLoadfEXT = <OpenGL.platform.baseplatform.glMatrixLoadfEXT object at 0x75760d0>
glMatrixMultTransposedEXT = <OpenGL.platform.baseplatform.glMatrixMultTransposedEXT object at 0x7576ad0>
glMatrixMultTransposefEXT = <OpenGL.platform.baseplatform.glMatrixMultTransposefEXT object at 0x7576a50>
glMatrixMultdEXT = <OpenGL.platform.baseplatform.glMatrixMultdEXT object at 0x75762d0>
glMatrixMultfEXT = <OpenGL.platform.baseplatform.glMatrixMultfEXT object at 0x75761d0>
glMatrixOrthoEXT = <OpenGL.platform.baseplatform.glMatrixOrthoEXT object at 0x7576750>
glMatrixPopEXT = <OpenGL.platform.baseplatform.glMatrixPopEXT object at 0x7576850>
glMatrixPushEXT = <OpenGL.platform.baseplatform.glMatrixPushEXT object at 0x7576910>
glMatrixRotatedEXT = <OpenGL.platform.baseplatform.glMatrixRotatedEXT object at 0x7576450>
glMatrixRotatefEXT = <OpenGL.platform.baseplatform.glMatrixRotatefEXT object at 0x75763d0>
glMatrixScaledEXT = <OpenGL.platform.baseplatform.glMatrixScaledEXT object at 0x7576550>
glMatrixScalefEXT = <OpenGL.platform.baseplatform.glMatrixScalefEXT object at 0x75764d0>
glMatrixTranslatedEXT = <OpenGL.platform.baseplatform.glMatrixTranslatedEXT object at 0x7576650>
glMatrixTranslatefEXT = <OpenGL.platform.baseplatform.glMatrixTranslatefEXT object at 0x75765d0>
glMultiTexBufferEXT = <OpenGL.platform.baseplatform.glMultiTexBufferEXT object at 0x76c5490>
glMultiTexCoordPointerEXT = <OpenGL.platform.baseplatform.glMultiTexCoordPointerEXT object at 0x757d150>
glMultiTexEnvfEXT = <OpenGL.platform.baseplatform.glMultiTexEnvfEXT object at 0x757d1d0>
glMultiTexEnvfvEXT = <OpenGL.platform.baseplatform.glMultiTexEnvfvEXT object at 0x757d250>
glMultiTexEnviEXT = <OpenGL.platform.baseplatform.glMultiTexEnviEXT object at 0x757d2d0>
glMultiTexEnvivEXT = <OpenGL.platform.baseplatform.glMultiTexEnvivEXT object at 0x757d350>
glMultiTexGendEXT = <OpenGL.platform.baseplatform.glMultiTexGendEXT object at 0x757d3d0>
glMultiTexGendvEXT = <OpenGL.platform.baseplatform.glMultiTexGendvEXT object at 0x757d450>
glMultiTexGenfEXT = <OpenGL.platform.baseplatform.glMultiTexGenfEXT object at 0x757d4d0>
glMultiTexGenfvEXT = <OpenGL.platform.baseplatform.glMultiTexGenfvEXT object at 0x757d550>
glMultiTexGeniEXT = <OpenGL.platform.baseplatform.glMultiTexGeniEXT object at 0x757d5d0>
glMultiTexGenivEXT = <OpenGL.platform.baseplatform.glMultiTexGenivEXT object at 0x757d650>
glMultiTexImage1DEXT = <OpenGL.platform.baseplatform.glMultiTexImage1DEXT object at 0x7579790>
glMultiTexImage2DEXT = <OpenGL.platform.baseplatform.glMultiTexImage2DEXT object at 0x7579810>
glMultiTexImage3DEXT = <OpenGL.platform.baseplatform.glMultiTexImage3DEXT object at 0x7579e10>
glMultiTexParameterIivEXT = <OpenGL.platform.baseplatform.glMultiTexParameterIivEXT object at 0x76bdd10>
glMultiTexParameterIuivEXT = <OpenGL.platform.baseplatform.glMultiTexParameterIuivEXT object at 0x76bdd90>
glMultiTexParameterfEXT = <OpenGL.platform.baseplatform.glMultiTexParameterfEXT object at 0x7579590>
glMultiTexParameterfvEXT = <OpenGL.platform.baseplatform.glMultiTexParameterfvEXT object at 0x7579610>
glMultiTexParameteriEXT = <OpenGL.platform.baseplatform.glMultiTexParameteriEXT object at 0x7579690>
glMultiTexParameterivEXT = <OpenGL.platform.baseplatform.glMultiTexParameterivEXT object at 0x7579710>
glMultiTexRenderbufferEXT = <OpenGL.platform.baseplatform.glMultiTexRenderbufferEXT object at 0x76c5f10>
glMultiTexSubImage1DEXT = <OpenGL.platform.baseplatform.glMultiTexSubImage1DEXT object at 0x7579890>
glMultiTexSubImage2DEXT = <OpenGL.platform.baseplatform.glMultiTexSubImage2DEXT object at 0x7579910>
glMultiTexSubImage3DEXT = <OpenGL.platform.baseplatform.glMultiTexSubImage3DEXT object at 0x7579e90>
glNamedBufferDataEXT = <OpenGL.platform.baseplatform.glNamedBufferDataEXT object at 0x76c1fd0>
glNamedBufferSubDataEXT = <OpenGL.platform.baseplatform.glNamedBufferSubDataEXT object at 0x76c5090>
glNamedFramebufferRenderbufferEXT = <OpenGL.platform.baseplatform.glNamedFramebufferRenderbufferEXT object at 0x76c5810>
glNamedFramebufferTexture1DEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTexture1DEXT object at 0x76c5690>
glNamedFramebufferTexture2DEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTexture2DEXT object at 0x76c5710>
glNamedFramebufferTexture3DEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTexture3DEXT object at 0x76c5790>
glNamedFramebufferTextureEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTextureEXT object at 0x76c5d10>
glNamedFramebufferTextureFaceEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTextureFaceEXT object at 0x76c5e10>
glNamedFramebufferTextureLayerEXT = <OpenGL.platform.baseplatform.glNamedFramebufferTextureLayerEXT object at 0x76c5d90>
glNamedProgramLocalParameter4dEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameter4dEXT object at 0x76bd290>
glNamedProgramLocalParameter4dvEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameter4dvEXT object at 0x76bd310>
glNamedProgramLocalParameter4fEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameter4fEXT object at 0x76bd390>
glNamedProgramLocalParameter4fvEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameter4fvEXT object at 0x76bd410>
glNamedProgramLocalParameterI4iEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameterI4iEXT object at 0x76bd710>
glNamedProgramLocalParameterI4ivEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameterI4ivEXT object at 0x76bd790>
glNamedProgramLocalParameterI4uiEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameterI4uiEXT object at 0x76bd890>
glNamedProgramLocalParameterI4uivEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameterI4uivEXT object at 0x76bd910>
glNamedProgramLocalParameters4fvEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParameters4fvEXT object at 0x76bd690>
glNamedProgramLocalParametersI4ivEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParametersI4ivEXT object at 0x76bd810>
glNamedProgramLocalParametersI4uivEXT = <OpenGL.platform.baseplatform.glNamedProgramLocalParametersI4uivEXT object at 0x76bd990>
glNamedProgramStringEXT = <OpenGL.platform.baseplatform.glNamedProgramStringEXT object at 0x76bd210>
glNamedRenderbufferStorageEXT = <OpenGL.platform.baseplatform.glNamedRenderbufferStorageEXT object at 0x76c5510>
glNamedRenderbufferStorageMultisampleCoverageEXT = <OpenGL.platform.baseplatform.glNamedRenderbufferStorageMultisampleCoverageEXT object at 0x76c5c90>
glNamedRenderbufferStorageMultisampleEXT = <OpenGL.platform.baseplatform.glNamedRenderbufferStorageMultisampleEXT object at 0x76c5c10>
glProgramUniform1fEXT = <OpenGL.platform.baseplatform.glProgramUniform1fEXT object at 0x76bdf10>
glProgramUniform1fvEXT = <OpenGL.platform.baseplatform.glProgramUniform1fvEXT object at 0x76c1350>
glProgramUniform1iEXT = <OpenGL.platform.baseplatform.glProgramUniform1iEXT object at 0x76c1150>
glProgramUniform1ivEXT = <OpenGL.platform.baseplatform.glProgramUniform1ivEXT object at 0x76c1550>
glProgramUniform1uiEXT = <OpenGL.platform.baseplatform.glProgramUniform1uiEXT object at 0x76c1bd0>
glProgramUniform1uivEXT = <OpenGL.platform.baseplatform.glProgramUniform1uivEXT object at 0x76c1dd0>
glProgramUniform2fEXT = <OpenGL.platform.baseplatform.glProgramUniform2fEXT object at 0x76bdf90>
glProgramUniform2fvEXT = <OpenGL.platform.baseplatform.glProgramUniform2fvEXT object at 0x76c13d0>
glProgramUniform2iEXT = <OpenGL.platform.baseplatform.glProgramUniform2iEXT object at 0x76c11d0>
glProgramUniform2ivEXT = <OpenGL.platform.baseplatform.glProgramUniform2ivEXT object at 0x76c15d0>
glProgramUniform2uiEXT = <OpenGL.platform.baseplatform.glProgramUniform2uiEXT object at 0x76c1c50>
glProgramUniform2uivEXT = <OpenGL.platform.baseplatform.glProgramUniform2uivEXT object at 0x76c1e50>
glProgramUniform3fEXT = <OpenGL.platform.baseplatform.glProgramUniform3fEXT object at 0x76c1050>
glProgramUniform3fvEXT = <OpenGL.platform.baseplatform.glProgramUniform3fvEXT object at 0x76c1450>
glProgramUniform3iEXT = <OpenGL.platform.baseplatform.glProgramUniform3iEXT object at 0x76c1250>
glProgramUniform3ivEXT = <OpenGL.platform.baseplatform.glProgramUniform3ivEXT object at 0x76c1650>
glProgramUniform3uiEXT = <OpenGL.platform.baseplatform.glProgramUniform3uiEXT object at 0x76c1cd0>
glProgramUniform3uivEXT = <OpenGL.platform.baseplatform.glProgramUniform3uivEXT object at 0x76c1ed0>
glProgramUniform4fEXT = <OpenGL.platform.baseplatform.glProgramUniform4fEXT object at 0x76c10d0>
glProgramUniform4fvEXT = <OpenGL.platform.baseplatform.glProgramUniform4fvEXT object at 0x76c14d0>
glProgramUniform4iEXT = <OpenGL.platform.baseplatform.glProgramUniform4iEXT object at 0x76c12d0>
glProgramUniform4ivEXT = <OpenGL.platform.baseplatform.glProgramUniform4ivEXT object at 0x76c16d0>
glProgramUniform4uiEXT = <OpenGL.platform.baseplatform.glProgramUniform4uiEXT object at 0x76c1d50>
glProgramUniform4uivEXT = <OpenGL.platform.baseplatform.glProgramUniform4uivEXT object at 0x76c1f50>
glProgramUniformMatrix2fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix2fvEXT object at 0x76c1750>
glProgramUniformMatrix2x3fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix2x3fvEXT object at 0x76c18d0>
glProgramUniformMatrix2x4fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix2x4fvEXT object at 0x76c19d0>
glProgramUniformMatrix3fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix3fvEXT object at 0x76c17d0>
glProgramUniformMatrix3x2fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix3x2fvEXT object at 0x76c1950>
glProgramUniformMatrix3x4fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix3x4fvEXT object at 0x76c1ad0>
glProgramUniformMatrix4fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix4fvEXT object at 0x76c1850>
glProgramUniformMatrix4x2fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix4x2fvEXT object at 0x76c1a50>
glProgramUniformMatrix4x3fvEXT = <OpenGL.platform.baseplatform.glProgramUniformMatrix4x3fvEXT object at 0x76c1b50>
glPushClientAttribDefaultEXT = <OpenGL.platform.baseplatform.glPushClientAttribDefaultEXT object at 0x7576090>
glTextureBufferEXT = <OpenGL.platform.baseplatform.glTextureBufferEXT object at 0x76c5410>
glTextureImage1DEXT = <OpenGL.platform.baseplatform.glTextureImage1DEXT object at 0x7576d50>
glTextureImage2DEXT = <OpenGL.platform.baseplatform.glTextureImage2DEXT object at 0x7576dd0>
glTextureImage3DEXT = <OpenGL.platform.baseplatform.glTextureImage3DEXT object at 0x7579410>
glTextureParameterIivEXT = <OpenGL.platform.baseplatform.glTextureParameterIivEXT object at 0x76bdb10>
glTextureParameterIuivEXT = <OpenGL.platform.baseplatform.glTextureParameterIuivEXT object at 0x76bdb90>
glTextureParameterfEXT = <OpenGL.platform.baseplatform.glTextureParameterfEXT object at 0x7576b50>
glTextureParameterfvEXT = <OpenGL.platform.baseplatform.glTextureParameterfvEXT object at 0x7576bd0>
glTextureParameteriEXT = <OpenGL.platform.baseplatform.glTextureParameteriEXT object at 0x7576c50>
glTextureParameterivEXT = <OpenGL.platform.baseplatform.glTextureParameterivEXT object at 0x7576cd0>
glTextureRenderbufferEXT = <OpenGL.platform.baseplatform.glTextureRenderbufferEXT object at 0x76c5e90>
glTextureSubImage1DEXT = <OpenGL.platform.baseplatform.glTextureSubImage1DEXT object at 0x7576e50>
glTextureSubImage2DEXT = <OpenGL.platform.baseplatform.glTextureSubImage2DEXT object at 0x7576ed0>
glTextureSubImage3DEXT = <OpenGL.platform.baseplatform.glTextureSubImage3DEXT object at 0x7579490>
glUnmapNamedBufferEXT = <OpenGL.platform.baseplatform.glUnmapNamedBufferEXT object at 0x76c5250>