+ print '#include "gltrace.hpp"'
+ print
+
+ # Which glVertexAttrib* variant to use
+ print 'enum vertex_attrib {'
+ print ' VERTEX_ATTRIB,'
+ print ' VERTEX_ATTRIB_ARB,'
+ print ' VERTEX_ATTRIB_NV,'
+ print '};'
+ print
+ print 'gltrace::Context *'
+ print 'gltrace::getContext(void)'
+ print '{'
+ print ' // TODO return the context set by other APIs (GLX, EGL, and etc.)'
+ print ' static gltrace::Context __ctx = { gltrace::PROFILE_COMPAT, false, false, false };'
+ print ' return &__ctx;'
+ print '}'
+ print
+ print 'static vertex_attrib __get_vertex_attrib(void) {'
+ print ' gltrace::Context *ctx = gltrace::getContext();'
+ print ' if (ctx->user_arrays_arb || ctx->user_arrays_nv) {'
+ print ' GLboolean __vertex_program = GL_FALSE;'
+ print ' __glGetBooleanv(GL_VERTEX_PROGRAM_ARB, &__vertex_program);'
+ print ' if (__vertex_program) {'
+ print ' if (ctx->user_arrays_nv) {'
+ print ' GLint __vertex_program_binding_nv = 0;'
+ print ' __glGetIntegerv(GL_VERTEX_PROGRAM_BINDING_NV, &__vertex_program_binding_nv);'
+ print ' if (__vertex_program_binding_nv) {'
+ print ' return VERTEX_ATTRIB_NV;'
+ print ' }'
+ print ' }'
+ print ' return VERTEX_ATTRIB_ARB;'
+ print ' }'
+ print ' }'
+ print ' return VERTEX_ATTRIB;'
+ print '}'