summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Fonseca <jfonseca@vmware.com>2016-05-06 10:44:33 +0100
committerJose Fonseca <jfonseca@vmware.com>2016-05-06 11:30:22 +0100
commit1ffdbbdc999d155c3abf2a012cf6515ee9ac2a38 (patch)
tree773555b82a424f40581d36782d405763d687096a
parent05e5c863bde2d0cb1cea14b50e77b524a719833b (diff)
cgltrace: Use DYLD_INTERPOSE (WIP).
-rw-r--r--cli/cli_trace.cpp11
-rw-r--r--dispatch/dispatch.py16
-rw-r--r--wrappers/CMakeLists.txt12
-rw-r--r--wrappers/cgltrace.py1376
-rw-r--r--wrappers/gltrace.py2
-rw-r--r--wrappers/trace.py10
6 files changed, 1402 insertions, 25 deletions
diff --git a/cli/cli_trace.cpp b/cli/cli_trace.cpp
index 97c1cc83..4e8f39e2 100644
--- a/cli/cli_trace.cpp
+++ b/cli/cli_trace.cpp
@@ -47,8 +47,8 @@
#if defined(__APPLE__)
-#define TRACE_VARIABLE "DYLD_FRAMEWORK_PATH"
-#define GL_TRACE_WRAPPER "OpenGL.framework/OpenGL"
+#define TRACE_VARIABLE "DYLD_INSERT_LIBRARIES"
+#define GL_TRACE_WRAPPER "cgltrace.dylib"
#elif defined(_WIN32)
#define GL_TRACE_WRAPPER "opengl32.dll"
#else
@@ -176,13 +176,6 @@ traceProgram(trace::API api,
(void)useInject;
#endif /* !_WIN32 */
-#if defined(__APPLE__)
- /* On Mac OS X, using DYLD_LIBRARY_PATH, we actually set the
- * parent directory, not the file. */
- wrapperPath.trimFilename();
- wrapperPath.trimFilename();
-#endif
-
/*
* Spawn child process.
*/
diff --git a/dispatch/dispatch.py b/dispatch/dispatch.py
index 9e778561..299ec53c 100644
--- a/dispatch/dispatch.py
+++ b/dispatch/dispatch.py
@@ -58,13 +58,18 @@ class Dispatcher:
# define standard name aliases for convenience, but only when not
# tracing, as that would cause symbol clashing with the tracing
# functions
- print '#ifdef RETRACE'
- for function in module.functions:
- print '#define %s _%s' % (function.name, function.name)
- print '#endif /* RETRACE */'
- print
+ #print '#ifdef RETRACE'
+ #for function in module.functions:
+ # print '#define %s _%s' % (function.name, function.name)
+ #print '#endif /* RETRACE */'
+ #print
def dispatchFunctionDecl(self, module, function):
+ print 'extern "C" ' + function.prototype() + ';'
+ print '#define _%s %s' % (function.name, function.name)
+ print
+ return
+
ptype = function_pointer_type(function)
pvalue = function_pointer_value(function)
print 'typedef ' + function.prototype('* %s' % ptype) + ';'
@@ -72,6 +77,7 @@ class Dispatcher:
print
def dispatchModuleImpl(self, module):
+ return
for function in module.functions:
self.dispatchFunctionImpl(module, function)
diff --git a/wrappers/CMakeLists.txt b/wrappers/CMakeLists.txt
index 84ec9a41..e5f235e7 100644
--- a/wrappers/CMakeLists.txt
+++ b/wrappers/CMakeLists.txt
@@ -323,23 +323,21 @@ elseif (APPLE)
add_dependencies (cgltrace glproc)
set_target_properties (cgltrace PROPERTIES
- # OpenGL framework name
- OUTPUT_NAME "OpenGL"
- # Mac framework
- FRAMEWORK true
- # Specificy the version and reexport GLU symbols
- LINK_FLAGS "-compatibility_version 1 -current_version 1.0.0 -Wl,-reexport_library,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib"
+ # avoid the default "lib" prefix
+ PREFIX ""
)
target_link_libraries (cgltrace
glhelpers
glproc_gl
trace
+ "-framework OpenGL" # CGL*
+ ${OPENGL_gl_LIBRARY}
${CMAKE_THREAD_LIBS_INIT}
${CMAKE_DL_LIBS}
)
- install (TARGETS cgltrace FRAMEWORK DESTINATION ${WRAPPER_INSTALL_DIR})
+ install (TARGETS cgltrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
elseif (X11_FOUND)
# libGL.so
add_custom_command (
diff --git a/wrappers/cgltrace.py b/wrappers/cgltrace.py
index 6c72f696..59ef58ae 100644
--- a/wrappers/cgltrace.py
+++ b/wrappers/cgltrace.py
@@ -28,17 +28,1376 @@
from gltrace import GlTracer
-from specs.stdapi import Module, API
+from specs.stdapi import Module, API, Void
from specs.glapi import glapi
from specs.cglapi import cglapi
+funcs = set((
+ "CGLAreContextsShared",
+ "CGLBackDispatch",
+ "CGLChoosePixelFormat",
+ "CGLClearDrawable",
+ "CGLCopyContext",
+ "CGLCreateContext",
+ "CGLCreatePBuffer",
+ "CGLDescribePBuffer",
+ "CGLDescribePixelFormat",
+ "CGLDescribeRenderer",
+ "CGLDestroyContext",
+ "CGLDestroyPBuffer",
+ "CGLDestroyPixelFormat",
+ "CGLDestroyRendererInfo",
+ "CGLDisable",
+ "CGLEnable",
+ "CGLErrorString",
+ "CGLFlushDrawable",
+ "CGLFrontDispatch",
+ "CGLGetContextRetainCount",
+ "CGLGetDeviceFromGLRenderer",
+ "CGLGetGlobalOption",
+ "CGLGetNextContext",
+ "CGLGetOffScreen",
+ "CGLGetOption",
+ "CGLGetPBuffer",
+ "CGLGetPBufferRetainCount",
+ "CGLGetParameter",
+ "CGLGetPixelFormat",
+ "CGLGetPixelFormatRetainCount",
+ "CGLGetShareGroup",
+ "CGLGetSurface",
+ "CGLGetVersion",
+ "CGLGetVirtualScreen",
+ "CGLIsEnabled",
+ "CGLLockContext",
+ "CGLOpenCLMuxLockDown",
+ "CGLQueryRendererInfo",
+ "CGLReleaseContext",
+ "CGLReleasePBuffer",
+ "CGLReleasePixelFormat",
+ "CGLRestoreDispatch",
+ "CGLRestoreDispatchFunction",
+ "CGLRetainContext",
+ "CGLRetainPBuffer",
+ "CGLRetainPixelFormat",
+ "CGLSelectDispatch",
+ "CGLSelectDispatchBounded",
+ "CGLSelectDispatchFunction",
+ "CGLSetFullScreen",
+ "CGLSetFullScreenOnDisplay",
+ "CGLSetGlobalOption",
+ "CGLSetOffScreen",
+ "CGLSetOption",
+ "CGLSetPBuffer",
+ "CGLSetPBufferVolatileState",
+ "CGLSetParameter",
+ "CGLSetSurface",
+ "CGLSetVirtualScreen",
+ "CGLTexImageIOSurface2D",
+ "CGLTexImagePBuffer",
+ "CGLUnlockContext",
+ "CGLUpdateContext",
+ "CGLGetCurrentContext",
+ "CGLSetCurrentContext",
+ "glAccum",
+ "glActiveShaderProgram",
+ "glActiveStencilFaceEXT",
+ "glActiveTexture",
+ "glActiveTextureARB",
+ "glAlphaFunc",
+ "glAreTexturesResident",
+ "glArrayElement",
+ "glAttachObjectARB",
+ "glAttachShader",
+ "glBegin",
+ "glBeginConditionalRender",
+ "glBeginConditionalRenderNV",
+ "glBeginQuery",
+ "glBeginQueryARB",
+ "glBeginQueryIndexed",
+ "glBeginTransformFeedback",
+ "glBeginTransformFeedbackEXT",
+ "glBindAttribLocation",
+ "glBindAttribLocationARB",
+ "glBindBuffer",
+ "glBindBufferARB",
+ "glBindBufferBase",
+ "glBindBufferBaseEXT",
+ "glBindBufferOffsetEXT",
+ "glBindBufferRange",
+ "glBindBufferRangeEXT",
+ "glBindFragDataLocation",
+ "glBindFragDataLocationEXT",
+ "glBindFragDataLocationIndexed",
+ "glBindFramebuffer",
+ "glBindFramebufferEXT",
+ "glBindProgramARB",
+ "glBindProgramPipeline",
+ "glBindRenderbuffer",
+ "glBindRenderbufferEXT",
+ "glBindSampler",
+ "glBindTexture",
+ "glBindTransformFeedback",
+ "glBindVertexArray",
+ "glBindVertexArrayAPPLE",
+ "glBitmap",
+ "glBlendColor",
+ "glBlendColorEXT",
+ "glBlendEquation",
+ "glBlendEquationEXT",
+ "glBlendEquationSeparate",
+ "glBlendEquationSeparateATI",
+ "glBlendEquationSeparateEXT",
+ "glBlendEquationSeparatei",
+ "glBlendEquationSeparateiARB",
+ "glBlendEquationi",
+ "glBlendEquationiARB",
+ "glBlendFunc",
+ "glBlendFuncSeparate",
+ "glBlendFuncSeparateEXT",
+ "glBlendFuncSeparatei",
+ "glBlendFuncSeparateiARB",
+ "glBlendFunci",
+ "glBlendFunciARB",
+ "glBlitFramebuffer",
+ "glBlitFramebufferEXT",
+ "glBufferData",
+ "glBufferDataARB",
+ "glBufferParameteriAPPLE",
+ "glBufferSubData",
+ "glBufferSubDataARB",
+ "glCallList",
+ "glCallLists",
+ "glCheckFramebufferStatus",
+ "glCheckFramebufferStatusEXT",
+ "glClampColor",
+ "glClampColorARB",
+ "glClear",
+ "glClearAccum",
+ "glClearBufferfi",
+ "glClearBufferfv",
+ "glClearBufferiv",
+ "glClearBufferuiv",
+ "glClearColor",
+ "glClearColorIiEXT",
+ "glClearColorIuiEXT",
+ "glClearDepth",
+ "glClearDepthf",
+ "glClearIndex",
+ "glClearStencil",
+ "glClientActiveTexture",
+ "glClientActiveTextureARB",
+ "glClientWaitSync",
+ "glClipPlane",
+ "glColor3b",
+ "glColor3bv",
+ "glColor3d",
+ "glColor3dv",
+ "glColor3f",
+ "glColor3fv",
+ "glColor3i",
+ "glColor3iv",
+ "glColor3s",
+ "glColor3sv",
+ "glColor3ub",
+ "glColor3ubv",
+ "glColor3ui",
+ "glColor3uiv",
+ "glColor3us",
+ "glColor3usv",
+ "glColor4b",
+ "glColor4bv",
+ "glColor4d",
+ "glColor4dv",
+ "glColor4f",
+ "glColor4fv",
+ "glColor4i",
+ "glColor4iv",
+ "glColor4s",
+ "glColor4sv",
+ "glColor4ub",
+ "glColor4ubv",
+ "glColor4ui",
+ "glColor4uiv",
+ "glColor4us",
+ "glColor4usv",
+ "glColorMask",
+ "glColorMaskIndexedEXT",
+ "glColorMaski",
+ "glColorMaterial",
+ "glColorPointer",
+ "glColorSubTable",
+ "glColorSubTableEXT",
+ "glColorTable",
+ "glColorTableEXT",
+ "glColorTableParameterfv",
+ "glColorTableParameteriv",
+ "glCombinerInputNV",
+ "glCombinerOutputNV",
+ "glCombinerParameterfNV",
+ "glCombinerParameterfvNV",
+ "glCombinerParameteriNV",
+ "glCombinerParameterivNV",
+ "glCombinerStageParameterfvNV",
+ "glCompileShader",
+ "glCompileShaderARB",
+ "glCompileShaderIncludeARB",
+ "glCompressedTexImage1D",
+ "glCompressedTexImage1DARB",
+ "glCompressedTexImage2D",
+ "glCompressedTexImage2DARB",
+ "glCompressedTexImage3D",
+ "glCompressedTexImage3DARB",
+ "glCompressedTexSubImage1D",
+ "glCompressedTexSubImage1DARB",
+ "glCompressedTexSubImage2D",
+ "glCompressedTexSubImage2DARB",
+ "glCompressedTexSubImage3D",
+ "glCompressedTexSubImage3DARB",
+ "glConvolutionFilter1D",
+ "glConvolutionFilter2D",
+ "glConvolutionParameterf",
+ "glConvolutionParameterfv",
+ "glConvolutionParameteri",
+ "glConvolutionParameteriv",
+ "glCopyBufferSubData",
+ "glCopyColorSubTable",
+ "glCopyColorTable",
+ "glCopyConvolutionFilter1D",
+ "glCopyConvolutionFilter2D",
+ "glCopyPixels",
+ "glCopyTexImage1D",
+ "glCopyTexImage2D",
+ "glCopyTexSubImage1D",
+ "glCopyTexSubImage2D",
+ "glCopyTexSubImage3D",
+ "glCreateProgram",
+ "glCreateProgramObjectARB",
+ "glCreateShader",
+ "glCreateShaderObjectARB",
+ "glCreateShaderProgramv",
+ "glCullFace",
+ "glDeleteBuffers",
+ "glDeleteBuffersARB",
+ "glDeleteFencesAPPLE",
+ "glDeleteFramebuffers",
+ "glDeleteFramebuffersEXT",
+ "glDeleteLists",
+ "glDeleteNamedStringARB",
+ "glDeleteObjectARB",
+ "glDeleteProgram",
+ "glDeleteProgramPipelines",
+ "glDeleteProgramsARB",
+ "glDeleteQueries",
+ "glDeleteQueriesARB",
+ "glDeleteRenderbuffers",
+ "glDeleteRenderbuffersEXT",
+ "glDeleteSamplers",
+ "glDeleteShader",
+ "glDeleteSync",
+ "glDeleteTextures",
+ "glDeleteTransformFeedbacks",
+ "glDeleteVertexArrays",
+ "glDeleteVertexArraysAPPLE",
+ "glDepthBoundsEXT",
+ "glDepthFunc",
+ "glDepthMask",
+ "glDepthRange",
+ "glDepthRangeArrayv",
+ "glDepthRangeIndexed",
+ "glDepthRangef",
+ "glDetachObjectARB",
+ "glDetachShader",
+ "glDisable",
+ "glDisableClientState",
+ "glDisableIndexedEXT",
+ "glDisableVertexAttribAPPLE",
+ "glDisableVertexAttribArray",
+ "glDisableVertexAttribArrayARB",
+ "glDisablei",
+ "glDrawArrays",
+ "glDrawArraysIndirect",
+ "glDrawArraysInstanced",
+ "glDrawArraysInstancedARB",
+ "glDrawBuffer",
+ "glDrawBuffers",
+ "glDrawBuffersARB",
+ "glDrawElementArrayAPPLE",
+ "glDrawElements",
+ "glDrawElementsBaseVertex",
+ "glDrawElementsIndirect",
+ "glDrawElementsInstanced",
+ "glDrawElementsInstancedARB",
+ "glDrawElementsInstancedBaseVertex",
+ "glDrawPixels",
+ "glDrawRangeElementArrayAPPLE",
+ "glDrawRangeElements",
+ "glDrawRangeElementsBaseVertex",
+ "glDrawRangeElementsEXT",
+ "glDrawTransformFeedback",
+ "glDrawTransformFeedbackStream",
+ "glEdgeFlag",
+ "glEdgeFlagPointer",
+ "glEdgeFlagv",
+ "glElementPointerAPPLE",
+ "glEnable",
+ "glEnableClientState",
+ "glEnableIndexedEXT",
+ "glEnableVertexAttribAPPLE",
+ "glEnableVertexAttribArray",
+ "glEnableVertexAttribArrayARB",
+ "glEnablei",
+ "glEnd",
+ "glEndConditionalRender",
+ "glEndConditionalRenderNV",
+ "glEndList",
+ "glEndQuery",
+ "glEndQueryARB",
+ "glEndQueryIndexed",
+ "glEndTransformFeedback",
+ "glEndTransformFeedbackEXT",
+ "glEvalCoord1d",
+ "glEvalCoord1dv",
+ "glEvalCoord1f",
+ "glEvalCoord1fv",
+ "glEvalCoord2d",
+ "glEvalCoord2dv",
+ "glEvalCoord2f",
+ "glEvalCoord2fv",
+ "glEvalMesh1",
+ "glEvalMesh2",
+ "glEvalPoint1",
+ "glEvalPoint2",
+ "glFeedbackBuffer",
+ "glFenceSync",
+ "glFinalCombinerInputNV",
+ "glFinish",
+ "glFinishFenceAPPLE",
+ "glFinishObjectAPPLE",
+ "glFinishRenderAPPLE",
+ "glFlush",
+ "glFlushMappedBufferRange",
+ "glFlushMappedBufferRangeAPPLE",
+ "glFlushRenderAPPLE",
+ "glFlushVertexArrayRangeAPPLE",
+ "glFogCoordPointer",
+ "glFogCoordPointerEXT",
+ "glFogCoordd",
+ "glFogCoorddEXT",
+ "glFogCoorddv",
+ "glFogCoorddvEXT",
+ "glFogCoordf",
+ "glFogCoordfEXT",
+ "glFogCoordfv",
+ "glFogCoordfvEXT",
+ "glFogf",
+ "glFogfv",
+ "glFogi",
+ "glFogiv",
+ "glFramebufferRenderbuffer",
+ "glFramebufferRenderbufferEXT",
+ "glFramebufferTexture",
+ "glFramebufferTexture1D",
+ "glFramebufferTexture1DEXT",
+ "glFramebufferTexture2D",
+ "glFramebufferTexture2DEXT",
+ "glFramebufferTexture3D",
+ "glFramebufferTexture3DEXT",
+ "glFramebufferTextureEXT",
+ "glFramebufferTextureFaceEXT",
+ "glFramebufferTextureLayer",
+ "glFramebufferTextureLayerEXT",
+ "glFrontFace",
+ "glFrustum",
+ "glGenBuffers",
+ "glGenBuffersARB",
+ "glGenFencesAPPLE",
+ "glGenFramebuffers",
+ "glGenFramebuffersEXT",
+ "glGenLists",
+ "glGenProgramPipelines",
+ "glGenProgramsARB",
+ "glGenQueries",
+ "glGenQueriesARB",
+ "glGenRenderbuffers",
+ "glGenRenderbuffersEXT",
+ "glGenSamplers",
+ "glGenTextures",
+ "glGenTransformFeedbacks",
+ "glGenVertexArrays",
+ "glGenVertexArraysAPPLE",
+ "glGenerateMipmap",
+ "glGenerateMipmapEXT",
+ "glGetActiveAttrib",
+ "glGetActiveAttribARB",
+ "glGetActiveSubroutineName",
+ "glGetActiveSubroutineUniformName",
+ "glGetActiveSubroutineUniformiv",
+ "glGetActiveUniform",
+ "glGetActiveUniformARB",
+ "glGetActiveUniformBlockName",
+ "glGetActiveUniformBlockiv",
+ "glGetActiveUniformName",
+ "glGetActiveUniformsiv",
+ "glGetAttachedObjectsARB",
+ "glGetAttachedShaders",
+ "glGetAttribLocation",
+ "glGetAttribLocationARB",
+ "glGetBooleanIndexedvEXT",
+ "glGetBooleani_v",
+ "glGetBooleanv",
+ "glGetBufferParameteri64v",
+ "glGetBufferParameteriv",
+ "glGetBufferParameterivARB",
+ "glGetBufferPointerv",
+ "glGetBufferPointervARB",
+ "glGetBufferSubData",
+ "glGetBufferSubDataARB",
+ "glGetClipPlane",
+ "glGetColorTable",
+ "glGetColorTableEXT",
+ "glGetColorTableParameterfv",
+ "glGetColorTableParameterfvEXT",
+ "glGetColorTableParameteriv",
+ "glGetColorTableParameterivEXT",
+ "glGetCombinerInputParameterfvNV",
+ "glGetCombinerInputParameterivNV",
+ "glGetCombinerOutputParameterfvNV",
+ "glGetCombinerOutputParameterivNV",
+ "glGetCombinerStageParameterfvNV",
+ "glGetCompressedTexImage",
+ "glGetCompressedTexImageARB",
+ "glGetConvolutionFilter",
+ "glGetConvolutionParameterfv",
+ "glGetConvolutionParameteriv",
+ "glGetDoublei_v",
+ "glGetDoublev",
+ "glGetError",
+ "glGetFinalCombinerInputParameterfvNV",
+ "glGetFinalCombinerInputParameterivNV",
+ "glGetFloati_v",
+ "glGetFloatv",
+ "glGetFragDataIndex",
+ "glGetFragDataLocation",
+ "glGetFragDataLocationEXT",
+ "glGetFramebufferAttachmentParameteriv",
+ "glGetFramebufferAttachmentParameterivEXT",
+ "glGetHandleARB",
+ "glGetHistogram",
+ "glGetHistogramParameterfv",
+ "glGetHistogramParameteriv",
+ "glGetInfoLogARB",
+ "glGetInteger64i_v",
+ "glGetInteger64v",
+ "glGetIntegerIndexedvEXT",
+ "glGetIntegeri_v",
+ "glGetIntegerv",
+ "glGetInternalformativ",
+ "glGetLightfv",
+ "glGetLightiv",
+ "glGetMapdv",
+ "glGetMapfv",
+ "glGetMapiv",
+ "glGetMaterialfv",
+ "glGetMaterialiv",
+ "glGetMinmax",
+ "glGetMinmaxParameterfv",
+ "glGetMinmaxParameteriv",
+ "glGetMultisamplefv",
+ "glGetNamedStringARB",
+ "glGetNamedStringivARB",
+ "glGetObjectLabelEXT",
+ "glGetObjectParameterfvARB",
+ "glGetObjectParameterivAPPLE",
+ "glGetObjectParameterivARB",
+ "glGetPixelMapfv",
+ "glGetPixelMapuiv",
+ "glGetPixelMapusv",
+ "glGetPointerv",
+ "glGetPolygonStipple",
+ "glGetProgramBinary",
+ "glGetProgramEnvParameterdvARB",
+ "glGetProgramEnvParameterfvARB",
+ "glGetProgramInfoLog",
+ "glGetProgramLocalParameterdvARB",
+ "glGetProgramLocalParameterfvARB",
+ "glGetProgramPipelineInfoLog",
+ "glGetProgramPipelineiv",
+ "glGetProgramStageiv",
+ "glGetProgramStringARB",
+ "glGetProgramiv",
+ "glGetProgramivARB",
+ "glGetQueryIndexediv",
+ "glGetQueryObjecti64v",
+ "glGetQueryObjecti64vEXT",
+ "glGetQueryObjectiv",
+ "glGetQueryObjectivARB",
+ "glGetQueryObjectui64v",
+ "glGetQueryObjectui64vEXT",
+ "glGetQueryObjectuiv",
+ "glGetQueryObjectuivARB",
+ "glGetQueryiv",
+ "glGetQueryivARB",
+ "glGetRenderbufferParameteriv",
+ "glGetRenderbufferParameterivEXT",
+ "glGetSamplerParameterIiv",
+ "glGetSamplerParameterIuiv",
+ "glGetSamplerParameterfv",
+ "glGetSamplerParameteriv",
+ "glGetSeparableFilter",
+ "glGetShaderInfoLog",
+ "glGetShaderPrecisionFormat",
+ "glGetShaderSource",
+ "glGetShaderSourceARB",
+ "glGetShaderiv",
+ "glGetString",
+ "glGetStringi",
+ "glGetSubroutineIndex",
+ "glGetSubroutineUniformLocation",
+ "glGetSynciv",
+ "glGetTexEnvfv",
+ "glGetTexEnviv",
+ "glGetTexGendv",
+ "glGetTexGenfv",
+ "glGetTexGeniv",
+ "glGetTexImage",
+ "glGetTexLevelParameterfv",
+ "glGetTexLevelParameteriv",
+ "glGetTexParameterIiv",
+ "glGetTexParameterIivEXT",
+ "glGetTexParameterIuiv",
+ "glGetTexParameterIuivEXT",
+ "glGetTexParameterPointervAPPLE",
+ "glGetTexParameterfv",
+ "glGetTexParameteriv",
+ "glGetTransformFeedbackVarying",
+ "glGetTransformFeedbackVaryingEXT",
+ "glGetUniformBlockIndex",
+ "glGetUniformBufferSizeEXT",
+ "glGetUniformIndices",
+ "glGetUniformLocation",
+ "glGetUniformLocationARB",
+ "glGetUniformOffsetEXT",
+ "glGetUniformSubroutineuiv",
+ "glGetUniformdv",
+ "glGetUniformfv",
+ "glGetUniformfvARB",
+ "glGetUniformiv",
+ "glGetUniformivARB",
+ "glGetUniformuiv",
+ "glGetUniformuivEXT",
+ "glGetVertexAttribIiv",
+ "glGetVertexAttribIivEXT",
+ "glGetVertexAttribIuiv",
+ "glGetVertexAttribIuivEXT",
+ "glGetVertexAttribLdv",
+ "glGetVertexAttribPointerv",
+ "glGetVertexAttribPointervARB",
+ "glGetVertexAttribdv",
+ "glGetVertexAttribdvARB",
+ "glGetVertexAttribfv",
+ "glGetVertexAttribfvARB",
+ "glGetVertexAttribiv",
+ "glGetVertexAttribivARB",
+ "glHint",
+ "glHistogram",
+ "glIndexMask",
+ "glIndexPointer",
+ "glIndexd",
+ "glIndexdv",
+ "glIndexf",
+ "glIndexfv",
+ "glIndexi",
+ "glIndexiv",
+ "glIndexs",
+ "glIndexsv",
+ "glIndexub",
+ "glIndexubv",
+ "glInitNames",
+ "glInsertEventMarkerEXT",
+ "glInterleavedArrays",
+ "glIsBuffer",
+ "glIsBufferARB",
+ "glIsEnabled",
+ "glIsEnabledIndexedEXT",
+ "glIsEnabledi",
+ "glIsFenceAPPLE",
+ "glIsFramebuffer",
+ "glIsFramebufferEXT",
+ "glIsList",
+ "glIsNamedStringARB",
+ "glIsProgram",
+ "glIsProgramARB",
+ "glIsProgramPipeline",
+ "glIsQuery",
+ "glIsQueryARB",
+ "glIsRenderbuffer",
+ "glIsRenderbufferEXT",
+ "glIsSampler",
+ "glIsShader",
+ "glIsSync",
+ "glIsTexture",
+ "glIsTransformFeedback",
+ "glIsVertexArray",
+ "glIsVertexArrayAPPLE",
+ "glIsVertexAttribEnabledAPPLE",
+ "glLabelObjectEXT",
+ "glLabelObjectWithResponsibleProcessAPPLE",
+ "glLightModelf",
+ "glLightModelfv",
+ "glLightModeli",
+ "glLightModeliv",
+ "glLightf",
+ "glLightfv",
+ "glLighti",
+ "glLightiv",
+ "glLineStipple",
+ "glLineWidth",
+ "glLinkProgram",
+ "glLinkProgramARB",
+ "glListBase",
+ "glLoadIdentity",
+ "glLoadMatrixd",
+ "glLoadMatrixf",
+ "glLoadName",
+ "glLoadTransposeMatrixd",
+ "glLoadTransposeMatrixdARB",
+ "glLoadTransposeMatrixf",
+ "glLoadTransposeMatrixfARB",
+ "glLockArraysEXT",
+ "glLogicOp",
+ "glMap1d",
+ "glMap1f",
+ "glMap2d",
+ "glMap2f",
+ "glMapBuffer",
+ "glMapBufferARB",
+ "glMapBufferRange",
+ "glMapGrid1d",
+ "glMapGrid1f",
+ "glMapGrid2d",
+ "glMapGrid2f",
+ "glMapVertexAttrib1dAPPLE",
+ "glMapVertexAttrib1fAPPLE",
+ "glMapVertexAttrib2dAPPLE",
+ "glMapVertexAttrib2fAPPLE",
+ "glMaterialf",
+ "glMaterialfv",
+ "glMateriali",
+ "glMaterialiv",
+ "glMatrixMode",
+ "glMinSampleShading",
+ "glMinSampleShadingARB",
+ "glMinmax",
+ "glMultMatrixd",
+ "glMultMatrixf",
+ "glMultTransposeMatrixd",
+ "glMultTransposeMatrixdARB",
+ "glMultTransposeMatrixf",
+ "glMultTransposeMatrixfARB",
+ "glMultiDrawArrays",
+ "glMultiDrawArraysEXT",
+ "glMultiDrawElementArrayAPPLE",
+ "glMultiDrawElements",
+ "glMultiDrawElementsBaseVertex",
+ "glMultiDrawElementsEXT",
+ "glMultiDrawRangeElementArrayAPPLE",
+ "glMultiTexCoord1d",
+ "glMultiTexCoord1dARB",
+ "glMultiTexCoord1dv",
+ "glMultiTexCoord1dvARB",
+ "glMultiTexCoord1f",
+ "glMultiTexCoord1fARB",
+ "glMultiTexCoord1fv",
+ "glMultiTexCoord1fvARB",
+ "glMultiTexCoord1i",
+ "glMultiTexCoord1iARB",
+ "glMultiTexCoord1iv",
+ "glMultiTexCoord1ivARB",
+ "glMultiTexCoord1s",
+ "glMultiTexCoord1sARB",
+ "glMultiTexCoord1sv",
+ "glMultiTexCoord1svARB",
+ "glMultiTexCoord2d",
+ "glMultiTexCoord2dARB",
+ "glMultiTexCoord2dv",
+ "glMultiTexCoord2dvARB",
+ "glMultiTexCoord2f",
+ "glMultiTexCoord2fARB",
+ "glMultiTexCoord2fv",
+ "glMultiTexCoord2fvARB",
+ "glMultiTexCoord2i",
+ "glMultiTexCoord2iARB",
+ "glMultiTexCoord2iv",
+ "glMultiTexCoord2ivARB",
+ "glMultiTexCoord2s",
+ "glMultiTexCoord2sARB",
+ "glMultiTexCoord2sv",
+ "glMultiTexCoord2svARB",
+ "glMultiTexCoord3d",
+ "glMultiTexCoord3dARB",
+ "glMultiTexCoord3dv",
+ "glMultiTexCoord3dvARB",
+ "glMultiTexCoord3f",
+ "glMultiTexCoord3fARB",
+ "glMultiTexCoord3fv",
+ "glMultiTexCoord3fvARB",
+ "glMultiTexCoord3i",
+ "glMultiTexCoord3iARB",
+ "glMultiTexCoord3iv",
+ "glMultiTexCoord3ivARB",
+ "glMultiTexCoord3s",
+ "glMultiTexCoord3sARB",
+ "glMultiTexCoord3sv",
+ "glMultiTexCoord3svARB",
+ "glMultiTexCoord4d",
+ "glMultiTexCoord4dARB",
+ "glMultiTexCoord4dv",
+ "glMultiTexCoord4dvARB",
+ "glMultiTexCoord4f",
+ "glMultiTexCoord4fARB",
+ "glMultiTexCoord4fv",
+ "glMultiTexCoord4fvARB",
+ "glMultiTexCoord4i",
+ "glMultiTexCoord4iARB",
+ "glMultiTexCoord4iv",
+ "glMultiTexCoord4ivARB",
+ "glMultiTexCoord4s",
+ "glMultiTexCoord4sARB",
+ "glMultiTexCoord4sv",
+ "glMultiTexCoord4svARB",
+ "glNamedStringARB",
+ "glNewList",
+ "glNormal3b",
+ "glNormal3bv",
+ "glNormal3d",
+ "glNormal3dv",
+ "glNormal3f",
+ "glNormal3fv",
+ "glNormal3i",
+ "glNormal3iv",
+ "glNormal3s",
+ "glNormal3sv",
+ "glNormalPointer",
+ "glObjectPurgeableAPPLE",
+ "glObjectUnpurgeableAPPLE",
+ "glOrtho",
+ "glPNTrianglesfATI",
+ "glPNTrianglesfATIX",
+ "glPNTrianglesiATI",
+ "glPNTrianglesiATIX",
+ "glPassThrough",
+ "glPatchParameterfv",
+ "glPatchParameteri",
+ "glPauseTransformFeedback",
+ "glPixelMapfv",
+ "glPixelMapuiv",
+ "glPixelMapusv",
+ "glPixelStoref",
+ "glPixelStorei",
+ "glPixelTransferf",
+ "glPixelTransferi",
+ "glPixelZoom",
+ "glPointParameterf",
+ "glPointParameterfARB",
+ "glPointParameterfv",
+ "glPointParameterfvARB",
+ "glPointParameteri",
+ "glPointParameteriNV",
+ "glPointParameteriv",
+ "glPointParameterivNV",
+ "glPointSize",
+ "glPointSizePointerAPPLE",
+ "glPolygonMode",
+ "glPolygonOffset",
+ "glPolygonStipple",
+ "glPopAttrib",
+ "glPopClientAttrib",
+ "glPopGroupMarkerEXT",
+ "glPopMatrix",
+ "glPopName",
+ "glPrimitiveRestartIndex",
+ "glPrioritizeTextures",
+ "glProgramBinary",
+ "glProgramEnvParameter4dARB",
+ "glProgramEnvParameter4dvARB",
+ "glProgramEnvParameter4fARB",
+ "glProgramEnvParameter4fvARB",
+ "glProgramEnvParameters4fvEXT",
+ "glProgramLocalParameter4dARB",
+ "glProgramLocalParameter4dvARB",
+ "glProgramLocalParameter4fARB",
+ "glProgramLocalParameter4fvARB",
+ "glProgramLocalParameters4fvEXT",
+ "glProgramParameteri",
+ "glProgramParameteriEXT",
+ "glProgramStringARB",
+ "glProgramUniform1d",
+ "glProgramUniform1dv",
+ "glProgramUniform1f",
+ "glProgramUniform1fv",
+ "glProgramUniform1i",
+ "glProgramUniform1iv",
+ "glProgramUniform1ui",
+ "glProgramUniform1uiv",
+ "glProgramUniform2d",
+ "glProgramUniform2dv",
+ "glProgramUniform2f",
+ "glProgramUniform2fv",
+ "glProgramUniform2i",
+ "glProgramUniform2iv",
+ "glProgramUniform2ui",
+ "glProgramUniform2uiv",
+ "glProgramUniform3d",
+ "glProgramUniform3dv",
+ "glProgramUniform3f",
+ "glProgramUniform3fv",
+ "glProgramUniform3i",
+ "glProgramUniform3iv",
+ "glProgramUniform3ui",
+ "glProgramUniform3uiv",
+ "glProgramUniform4d",
+ "glProgramUniform4dv",
+ "glProgramUniform4f",
+ "glProgramUniform4fv",
+ "glProgramUniform4i",
+ "glProgramUniform4iv",
+ "glProgramUniform4ui",
+ "glProgramUniform4uiv",
+ "glProgramUniformMatrix2dv",
+ "glProgramUniformMatrix2fv",
+ "glProgramUniformMatrix2x3dv",
+ "glProgramUniformMatrix2x3fv",
+ "glProgramUniformMatrix2x4dv",
+ "glProgramUniformMatrix2x4fv",
+ "glProgramUniformMatrix3dv",
+ "glProgramUniformMatrix3fv",
+ "glProgramUniformMatrix3x2dv",
+ "glProgramUniformMatrix3x2fv",
+ "glProgramUniformMatrix3x4dv",
+ "glProgramUniformMatrix3x4fv",
+ "glProgramUniformMatrix4dv",
+ "glProgramUniformMatrix4fv",
+ "glProgramUniformMatrix4x2dv",
+ "glProgramUniformMatrix4x2fv",
+ "glProgramUniformMatrix4x3dv",
+ "glProgramUniformMatrix4x3fv",
+ "glProvokingVertex",
+ "glProvokingVertexEXT",
+ "glPushAttrib",
+ "glPushClientAttrib",
+ "glPushGroupMarkerEXT",
+ "glPushMatrix",
+ "glPushName",
+ "glQueryCounter",
+ "glRasterPos2d",
+ "glRasterPos2dv",
+ "glRasterPos2f",
+ "glRasterPos2fv",
+ "glRasterPos2i",
+ "glRasterPos2iv",
+ "glRasterPos2s",
+ "glRasterPos2sv",
+ "glRasterPos3d",
+ "glRasterPos3dv",
+ "glRasterPos3f",
+ "glRasterPos3fv",
+ "glRasterPos3i",
+ "glRasterPos3iv",
+ "glRasterPos3s",
+ "glRasterPos3sv",
+ "glRasterPos4d",
+ "glRasterPos4dv",
+ "glRasterPos4f",
+ "glRasterPos4fv",
+ "glRasterPos4i",
+ "glRasterPos4iv",
+ "glRasterPos4s",
+ "glRasterPos4sv",
+ "glReadBuffer",
+ "glReadPixels",
+ "glRectd",
+ "glRectdv",
+ "glRectf",
+ "glRectfv",
+ "glRecti",
+ "glRectiv",
+ "glRects",
+ "glRectsv",
+ "glReleaseShaderCompiler",
+ "glRenderMode",
+ "glRenderbufferStorage",
+ "glRenderbufferStorageEXT",
+ "glRenderbufferStorageMultisample",
+ "glRenderbufferStorageMultisampleEXT",
+ "glResetHistogram",
+ "glResetMinmax",
+ "glResumeTransformFeedback",
+ "glRotated",
+ "glRotatef",
+ "glSampleCoverage",
+ "glSampleCoverageARB",
+ "glSampleMaski",
+ "glSamplePass",
+ "glSamplePassARB",
+ "glSamplerParameterIiv",
+ "glSamplerParameterIuiv",
+ "glSamplerParameterf",
+ "glSamplerParameterfv",
+ "glSamplerParameteri",
+ "glSamplerParameteriv",
+ "glScaled",
+ "glScalef",
+ "glScissor",
+ "glScissorArrayv",
+ "glScissorIndexed",
+ "glScissorIndexedv",
+ "glSecondaryColor3b",
+ "glSecondaryColor3bEXT",
+ "glSecondaryColor3bv",
+ "glSecondaryColor3bvEXT",
+ "glSecondaryColor3d",
+ "glSecondaryColor3dEXT",
+ "glSecondaryColor3dv",
+ "glSecondaryColor3dvEXT",
+ "glSecondaryColor3f",
+ "glSecondaryColor3fEXT",
+ "glSecondaryColor3fv",
+ "glSecondaryColor3fvEXT",
+ "glSecondaryColor3i",
+ "glSecondaryColor3iEXT",
+ "glSecondaryColor3iv",
+ "glSecondaryColor3ivEXT",
+ "glSecondaryColor3s",
+ "glSecondaryColor3sEXT",
+ "glSecondaryColor3sv",
+ "glSecondaryColor3svEXT",
+ "glSecondaryColor3ub",
+ "glSecondaryColor3ubEXT",
+ "glSecondaryColor3ubv",
+ "glSecondaryColor3ubvEXT",
+ "glSecondaryColor3ui",
+ "glSecondaryColor3uiEXT",
+ "glSecondaryColor3uiv",
+ "glSecondaryColor3uivEXT",
+ "glSecondaryColor3us",
+ "glSecondaryColor3usEXT",
+ "glSecondaryColor3usv",
+ "glSecondaryColor3usvEXT",
+ "glSecondaryColorPointer",
+ "glSecondaryColorPointerEXT",
+ "glSelectBuffer",
+ "glSeparableFilter2D",
+ "glSetFenceAPPLE",
+ "glShadeModel",
+ "glShaderBinary",
+ "glShaderSource",
+ "glShaderSourceARB",
+ "glStencilFunc",
+ "glStencilFuncSeparate",
+ "glStencilFuncSeparateATI",
+ "glStencilMask",
+ "glStencilMaskSeparate",
+ "glStencilOp",
+ "glStencilOpSeparate",
+ "glStencilOpSeparateATI",
+ "glSwapAPPLE",
+ "glTestFenceAPPLE",
+ "glTestObjectAPPLE",
+ "glTexBuffer",
+ "glTexCoord1d",
+ "glTexCoord1dv",
+ "glTexCoord1f",
+ "glTexCoord1fv",
+ "glTexCoord1i",
+ "glTexCoord1iv",
+ "glTexCoord1s",
+ "glTexCoord1sv",
+ "glTexCoord2d",
+ "glTexCoord2dv",
+ "glTexCoord2f",
+ "glTexCoord2fv",
+ "glTexCoord2i",
+ "glTexCoord2iv",
+ "glTexCoord2s",
+ "glTexCoord2sv",
+ "glTexCoord3d",
+ "glTexCoord3dv",
+ "glTexCoord3f",
+ "glTexCoord3fv",
+ "glTexCoord3i",
+ "glTexCoord3iv",
+ "glTexCoord3s",
+ "glTexCoord3sv",
+ "glTexCoord4d",
+ "glTexCoord4dv",
+ "glTexCoord4f",
+ "glTexCoord4fv",
+ "glTexCoord4i",
+ "glTexCoord4iv",
+ "glTexCoord4s",
+ "glTexCoord4sv",
+ "glTexCoordPointer",
+ "glTexEnvf",
+ "glTexEnvfv",
+ "glTexEnvi",
+ "glTexEnviv",
+ "glTexGend",
+ "glTexGendv",
+ "glTexGenf",
+ "glTexGenfv",
+ "glTexGeni",
+ "glTexGeniv",
+ "glTexImage1D",
+ "glTexImage2D",
+ "glTexImage2DMultisample",
+ "glTexImage3D",
+ "glTexImage3DMultisample",
+ "glTexParameterIiv",
+ "glTexParameterIivEXT",
+ "glTexParameterIuiv",
+ "glTexParameterIuivEXT",
+ "glTexParameterf",
+ "glTexParameterfv",
+ "glTexParameteri",
+ "glTexParameteriv",
+ "glTexStorage1D",
+ "glTexStorage2D",
+ "glTexStorage3D",
+ "glTexSubImage1D",
+ "glTexSubImage2D",
+ "glTexSubImage3D",
+ "glTextureBarrierNV",
+ "glTextureRangeAPPLE",
+ "glTransformFeedbackVaryings",
+ "glTransformFeedbackVaryingsEXT",
+ "glTranslated",
+ "glTranslatef",
+ "glUniform1d",
+ "glUniform1dv",
+ "glUniform1f",
+ "glUniform1fARB",
+ "glUniform1fv",
+ "glUniform1fvARB",
+ "glUniform1i",
+ "glUniform1iARB",
+ "glUniform1iv",
+ "glUniform1ivARB",
+ "glUniform1ui",
+ "glUniform1uiEXT",
+ "glUniform1uiv",
+ "glUniform1uivEXT",
+ "glUniform2d",
+ "glUniform2dv",
+ "glUniform2f",
+ "glUniform2fARB",
+ "glUniform2fv",
+ "glUniform2fvARB",
+ "glUniform2i",
+ "glUniform2iARB",
+ "glUniform2iv",
+ "glUniform2ivARB",
+ "glUniform2ui",
+ "glUniform2uiEXT",
+ "glUniform2uiv",
+ "glUniform2uivEXT",
+ "glUniform3d",
+ "glUniform3dv",
+ "glUniform3f",
+ "glUniform3fARB",
+ "glUniform3fv",
+ "glUniform3fvARB",
+ "glUniform3i",
+ "glUniform3iARB",
+ "glUniform3iv",
+ "glUniform3ivARB",
+ "glUniform3ui",
+ "glUniform3uiEXT",
+ "glUniform3uiv",
+ "glUniform3uivEXT",
+ "glUniform4d",
+ "glUniform4dv",
+ "glUniform4f",
+ "glUniform4fARB",
+ "glUniform4fv",
+ "glUniform4fvARB",
+ "glUniform4i",
+ "glUniform4iARB",
+ "glUniform4iv",
+ "glUniform4ivARB",
+ "glUniform4ui",
+ "glUniform4uiEXT",
+ "glUniform4uiv",
+ "glUniform4uivEXT",
+ "glUniformBlockBinding",
+ "glUniformBufferEXT",
+ "glUniformMatrix2dv",
+ "glUniformMatrix2fv",
+ "glUniformMatrix2fvARB",
+ "glUniformMatrix2x3dv",
+ "glUniformMatrix2x3fv",
+ "glUniformMatrix2x4dv",
+ "glUniformMatrix2x4fv",
+ "glUniformMatrix3dv",
+ "glUniformMatrix3fv",
+ "glUniformMatrix3fvARB",
+ "glUniformMatrix3x2dv",
+ "glUniformMatrix3x2fv",
+ "glUniformMatrix3x4dv",
+ "glUniformMatrix3x4fv",
+ "glUniformMatrix4dv",
+ "glUniformMatrix4fv",
+ "glUniformMatrix4fvARB",
+ "glUniformMatrix4x2dv",
+ "glUniformMatrix4x2fv",
+ "glUniformMatrix4x3dv",
+ "glUniformMatrix4x3fv",
+ "glUniformSubroutinesuiv",
+ "glUnlockArraysEXT",
+ "glUnmapBuffer",
+ "glUnmapBufferARB",
+ "glUseProgram",
+ "glUseProgramObjectARB",
+ "glUseProgramStages",
+ "glValidateProgram",
+ "glValidateProgramARB",
+ "glValidateProgramPipeline",
+ "glVertex2d",
+ "glVertex2dv",
+ "glVertex2f",
+ "glVertex2fv",
+ "glVertex2i",
+ "glVertex2iv",
+ "glVertex2s",
+ "glVertex2sv",
+ "glVertex3d",
+ "glVertex3dv",
+ "glVertex3f",
+ "glVertex3fv",
+ "glVertex3i",
+ "glVertex3iv",
+ "glVertex3s",
+ "glVertex3sv",
+ "glVertex4d",
+ "glVertex4dv",
+ "glVertex4f",
+ "glVertex4fv",
+ "glVertex4i",
+ "glVertex4iv",
+ "glVertex4s",
+ "glVertex4sv",
+ "glVertexArrayParameteriAPPLE",
+ "glVertexArrayRangeAPPLE",
+ "glVertexAttrib1d",
+ "glVertexAttrib1dARB",
+ "glVertexAttrib1dv",
+ "glVertexAttrib1dvARB",
+ "glVertexAttrib1f",
+ "glVertexAttrib1fARB",
+ "glVertexAttrib1fv",
+ "glVertexAttrib1fvARB",
+ "glVertexAttrib1s",
+ "glVertexAttrib1sARB",
+ "glVertexAttrib1sv",
+ "glVertexAttrib1svARB",
+ "glVertexAttrib2d",
+ "glVertexAttrib2dARB",
+ "glVertexAttrib2dv",
+ "glVertexAttrib2dvARB",
+ "glVertexAttrib2f",
+ "glVertexAttrib2fARB",
+ "glVertexAttrib2fv",
+ "glVertexAttrib2fvARB",
+ "glVertexAttrib2s",
+ "glVertexAttrib2sARB",
+ "glVertexAttrib2sv",
+ "glVertexAttrib2svARB",
+ "glVertexAttrib3d",
+ "glVertexAttrib3dARB",
+ "glVertexAttrib3dv",
+ "glVertexAttrib3dvARB",
+ "glVertexAttrib3f",
+ "glVertexAttrib3fARB",
+ "glVertexAttrib3fv",
+ "glVertexAttrib3fvARB",
+ "glVertexAttrib3s",
+ "glVertexAttrib3sARB",
+ "glVertexAttrib3sv",
+ "glVertexAttrib3svARB",
+ "glVertexAttrib4Nbv",
+ "glVertexAttrib4NbvARB",
+ "glVertexAttrib4Niv",
+ "glVertexAttrib4NivARB",
+ "glVertexAttrib4Nsv",
+ "glVertexAttrib4NsvARB",
+ "glVertexAttrib4Nub",
+ "glVertexAttrib4NubARB",
+ "glVertexAttrib4Nubv",
+ "glVertexAttrib4NubvARB",
+ "glVertexAttrib4Nuiv",
+ "glVertexAttrib4NuivARB",
+ "glVertexAttrib4Nusv",
+ "glVertexAttrib4NusvARB",
+ "glVertexAttrib4bv",
+ "glVertexAttrib4bvARB",
+ "glVertexAttrib4d",
+ "glVertexAttrib4dARB",
+ "glVertexAttrib4dv",
+ "glVertexAttrib4dvARB",
+ "glVertexAttrib4f",
+ "glVertexAttrib4fARB",
+ "glVertexAttrib4fv",
+ "glVertexAttrib4fvARB",
+ "glVertexAttrib4iv",
+ "glVertexAttrib4ivARB",
+ "glVertexAttrib4s",
+ "glVertexAttrib4sARB",
+ "glVertexAttrib4sv",
+ "glVertexAttrib4svARB",
+ "glVertexAttrib4ubv",
+ "glVertexAttrib4ubvARB",
+ "glVertexAttrib4uiv",
+ "glVertexAttrib4uivARB",
+ "glVertexAttrib4usv",
+ "glVertexAttrib4usvARB",
+ "glVertexAttribDivisor",
+ "glVertexAttribDivisorARB",
+ "glVertexAttribI1i",
+ "glVertexAttribI1iEXT",
+ "glVertexAttribI1iv",
+ "glVertexAttribI1ivEXT",
+ "glVertexAttribI1ui",
+ "glVertexAttribI1uiEXT",
+ "glVertexAttribI1uiv",
+ "glVertexAttribI1uivEXT",
+ "glVertexAttribI2i",
+ "glVertexAttribI2iEXT",
+ "glVertexAttribI2iv",
+ "glVertexAttribI2ivEXT",
+ "glVertexAttribI2ui",
+ "glVertexAttribI2uiEXT",
+ "glVertexAttribI2uiv",
+ "glVertexAttribI2uivEXT",
+ "glVertexAttribI3i",
+ "glVertexAttribI3iEXT",
+ "glVertexAttribI3iv",
+ "glVertexAttribI3ivEXT",
+ "glVertexAttribI3ui",
+ "glVertexAttribI3uiEXT",
+ "glVertexAttribI3uiv",
+ "glVertexAttribI3uivEXT",
+ "glVertexAttribI4bv",
+ "glVertexAttribI4bvEXT",
+ "glVertexAttribI4i",
+ "glVertexAttribI4iEXT",
+ "glVertexAttribI4iv",
+ "glVertexAttribI4ivEXT",
+ "glVertexAttribI4sv",
+ "glVertexAttribI4svEXT",
+ "glVertexAttribI4ubv",
+ "glVertexAttribI4ubvEXT",
+ "glVertexAttribI4ui",
+ "glVertexAttribI4uiEXT",
+ "glVertexAttribI4uiv",
+ "glVertexAttribI4uivEXT",
+ "glVertexAttribI4usv",
+ "glVertexAttribI4usvEXT",
+ "glVertexAttribIPointer",
+ "glVertexAttribIPointerEXT",
+ "glVertexAttribL1d",
+ "glVertexAttribL1dv",
+ "glVertexAttribL2d",
+ "glVertexAttribL2dv",
+ "glVertexAttribL3d",
+ "glVertexAttribL3dv",
+ "glVertexAttribL4d",
+ "glVertexAttribL4dv",
+ "glVertexAttribLPointer",
+ "glVertexAttribP1ui",
+ "glVertexAttribP1uiv",
+ "glVertexAttribP2ui",
+ "glVertexAttribP2uiv",
+ "glVertexAttribP3ui",
+ "glVertexAttribP3uiv",
+ "glVertexAttribP4ui",
+ "glVertexAttribP4uiv",
+ "glVertexAttribPointer",
+ "glVertexAttribPointerARB",
+ "glVertexBlendARB",
+ "glVertexPointSizefAPPLE",
+ "glVertexPointer",
+ "glViewport",
+ "glViewportArrayv",
+ "glViewportIndexedf",
+ "glViewportIndexedfv",
+ "glWaitSync",
+ "glWeightPointerARB",
+ "glWeightbvARB",
+ "glWeightdvARB",
+ "glWeightfvARB",
+ "glWeightivARB",
+ "glWeightsvARB",
+ "glWeightubvARB",
+ "glWeightuivARB",
+ "glWeightusvARB",
+ "glWindowPos2d",
+ "glWindowPos2dARB",
+ "glWindowPos2dv",
+ "glWindowPos2dvARB",
+ "glWindowPos2f",
+ "glWindowPos2fARB",
+ "glWindowPos2fv",
+ "glWindowPos2fvARB",
+ "glWindowPos2i",
+ "glWindowPos2iARB",
+ "glWindowPos2iv",
+ "glWindowPos2ivARB",
+ "glWindowPos2s",
+ "glWindowPos2sARB",
+ "glWindowPos2sv",
+ "glWindowPos2svARB",
+ "glWindowPos3d",
+ "glWindowPos3dARB",
+ "glWindowPos3dv",
+ "glWindowPos3dvARB",
+ "glWindowPos3f",
+ "glWindowPos3fARB",
+ "glWindowPos3fv",
+ "glWindowPos3fvARB",
+ "glWindowPos3i",
+ "glWindowPos3iARB",
+ "glWindowPos3iv",
+ "glWindowPos3ivARB",
+ "glWindowPos3s",
+ "glWindowPos3sARB",
+ "glWindowPos3sv",
+ "glWindowPos3svARB",
+))
+
class CglTracer(GlTracer):
def isFunctionPublic(self, function):
# all OpenGL symbols are visible on MacOSX
return True
+ def traceFunctionProto(self, function):
+ print 'static'
+ print function.prototype(name = 'my_' + function.name)
+
+ def traceFunctionImpl(self, function):
+ if function.name not in funcs:
+ return
+
+ print 'extern "C"'
+ print function.prototype() + ';'
+ print
+
+ GlTracer.traceFunctionImpl(self, function)
+
+ # http://opensource.apple.com//source/dyld/dyld-239.4/include/mach-o/dyld-interposing.h
+ print 'DYLD_INTERPOSE(my_%s, %s)' % (function.name, function.name)
+ print
+
def traceFunctionImplBody(self, function):
if function.name == 'CGLReleaseContext':
# Unlike other GL APIs like EGL or GLX, CGL will make the context
@@ -78,6 +1437,15 @@ class CglTracer(GlTracer):
if function.name == 'CGLRetainContext':
print ' gltrace::retainContext((uintptr_t)ctx);'
+ def ______doInvokeFunction(self, function, prefix='_', suffix=''):
+ # Same as invokeFunction() but called both when trace is enabled or disabled.
+ if function.type is Void:
+ result = ''
+ else:
+ result = '_result = '
+ dispatch = function.name + suffix
+ print ' %s%s(%s);' % (result, dispatch, ', '.join([str(arg.name) for arg in function.args]))
+
if __name__ == '__main__':
print
@@ -92,6 +1460,12 @@ if __name__ == '__main__':
print '#include "glproc.hpp"'
print '#include "glsize.hpp"'
print
+ #print '#include <mach-o/dyld-interposing.h>'
+ print '''
+#define DYLD_INTERPOSE(_replacement,_replacee) \
+ __attribute__((used)) static struct{ const void* replacement; const void* replacee; } _interpose_##_replacee \
+ __attribute__ ((section ("__DATA,__interpose"))) = { (const void*)(unsigned long)&_replacement, (const void*)(unsigned long)&_replacee };'''
+ print
module = Module()
module.mergeModule(cglapi)
diff --git a/wrappers/gltrace.py b/wrappers/gltrace.py
index 38f1516a..37664ae5 100644
--- a/wrappers/gltrace.py
+++ b/wrappers/gltrace.py
@@ -1071,7 +1071,7 @@ class GlTracer(Tracer):
print
print ' vertex_attrib _vertex_attrib = _get_vertex_attrib();'
print
- for suffix in ['', 'NV']:
+ for suffix in ['']:
if suffix:
SUFFIX = '_' + suffix
else:
diff --git a/wrappers/trace.py b/wrappers/trace.py
index 18c8816e..8eec9b9b 100644
--- a/wrappers/trace.py
+++ b/wrappers/trace.py
@@ -549,12 +549,18 @@ class Tracer:
def isFunctionPublic(self, function):
return True
- def traceFunctionImpl(self, function):
+ def traceFunctionProto(self, function):
if self.isFunctionPublic(function):
print 'extern "C" PUBLIC'
else:
print 'extern "C" PRIVATE'
- print function.prototype() + ' {'
+ print function.prototype()
+
+ def traceFunctionImpl(self, function):
+ self.traceFunctionProto(function)
+
+ print '{'
+
if function.type is not stdapi.Void:
print ' %s _result;' % function.type