X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace.py;h=f2cc37232032387af218e300cf6b318eb43e1e3c;hb=212ab924e5b9fc17820fe6b14547685ad2325f58;hp=be30616d590295705da87b0e4942e27bb69063af;hpb=3bb28dd9e2b6b18b7f2f8d2589a8d06d138a43ef;p=apitrace diff --git a/retrace/glretrace.py b/retrace/glretrace.py index be30616..f2cc372 100644 --- a/retrace/glretrace.py +++ b/retrace/glretrace.py @@ -299,7 +299,9 @@ class GlRetracer(Retracer): ) if function.name in ('glUseProgram', 'glUseProgramObjectARB'): - print r' glretrace::setActiveProgram((call.arg(0)).toUInt());' + print r' if (glretrace::currentContext) {' + print r' glretrace::currentContext->activeProgram = call.arg(0).toUInt();' + print r' }' # Only profile if not inside a list as the queries get inserted into list if function.name == 'glNewList': @@ -308,9 +310,12 @@ class GlRetracer(Retracer): if function.name == 'glEndList': print r' glretrace::insideList = false;' - if profileDraw and function.name != 'glEnd': + if function.name != 'glEnd': print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' - print r' glretrace::beginProfile(call);' + if profileDraw: + print r' glretrace::beginProfile(call, true);' + else: + print r' glretrace::beginProfile(call, false);' print r' }' if function.name == 'glCreateShaderProgramv': @@ -344,15 +349,18 @@ class GlRetracer(Retracer): else: Retracer.invokeFunction(self, function) - if profileDraw or function.name == 'glEnd': - print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' - print r' glretrace::endProfile(call);' - print r' }' - - # Error checking if function.name == "glBegin": print ' glretrace::insideGlBeginEnd = true;' - elif function.name.startswith('gl'): + + print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' + if profileDraw: + print r' glretrace::endProfile(call, true);' + else: + print r' glretrace::endProfile(call, false);' + print r' }' + + # Error checking + if function.name.startswith('gl'): # glGetError is not allowed inside glBegin/glEnd print ' if (retrace::debug && !glretrace::insideGlBeginEnd) {' print ' glretrace::checkGlError(call);' @@ -469,14 +477,19 @@ class GlRetracer(Retracer): and 'program' not in function.argNames(): # Determine the active program for uniforms swizzling print ' GLint program = -1;' - print ' GLint pipeline = 0;' - print ' if (_pipelineHasBeenBound) {' - print ' glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline);' - print ' }' - print ' if (pipeline) {' - print ' glGetProgramPipelineiv(pipeline, GL_ACTIVE_PROGRAM, &program);' + print ' if (glretrace::insideList) {' + print ' // glUseProgram & glUseProgramObjectARB are display-list-able' + print ' program = _program_map[glretrace::currentContext->activeProgram];' print ' } else {' - print ' glGetIntegerv(GL_CURRENT_PROGRAM, &program);' + print ' GLint pipeline = 0;' + print ' if (_pipelineHasBeenBound) {' + print ' glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline);' + print ' }' + print ' if (pipeline) {' + print ' glGetProgramPipelineiv(pipeline, GL_ACTIVE_PROGRAM, &program);' + print ' } else {' + print ' glGetIntegerv(GL_CURRENT_PROGRAM, &program);' + print ' }' print ' }' print