X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglretrace.py;h=6fdeffe49eaa8c14ed2cedcb820344679d271216;hb=cbb86175e81c2765f14fa01a2dc49d367203ac1f;hp=440366cb87a85f22eb8fdb53201f46b435664cf0;hpb=addf7f90727a50040d79e6da6d59ffb031074674;p=apitrace diff --git a/retrace/glretrace.py b/retrace/glretrace.py index 440366c..6fdeffe 100644 --- a/retrace/glretrace.py +++ b/retrace/glretrace.py @@ -250,7 +250,7 @@ class GlRetracer(Retracer): print ' glretrace::insideGlBeginEnd = false;' if function.name.startswith('gl') and not function.name.startswith('glX'): - print r' if (retrace::debug && !glretrace::currentContext) {' + print r' if (retrace::debug && !glretrace::getCurrentContext()) {' print r' retrace::warning(call) << "no current context\n";' print r' }' @@ -294,19 +294,29 @@ class GlRetracer(Retracer): function.name in self.draw_array_function_names or function.name in self.draw_elements_function_names or function.name in self.draw_indirect_function_names or - function.name in self.misc_draw_function_names + function.name in self.misc_draw_function_names or + function.name == 'glBegin' ) - # Only profile if not inside a list as the queries get inserted into lsit + if function.name in ('glUseProgram', 'glUseProgramObjectARB'): + print r' glretrace::Context *currentContext = glretrace::getCurrentContext();' + print r' if (currentContext) {' + print r' 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': - print r' glretrace::insideList = true;'; + print r' glretrace::insideList = true;' if function.name == 'glEndList': - print r' glretrace::insideList = false;'; + print r' glretrace::insideList = false;' - if profileDraw: - print r' if (!glretrace::insideList && retrace::profileGPU) {' - print r' glretrace::beginProfileGPU(call);' + if function.name != 'glEnd': + print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' + if profileDraw: + print r' glretrace::beginProfile(call, true);' + else: + print r' glretrace::beginProfile(call, false);' print r' }' if function.name == 'glCreateShaderProgramv': @@ -340,17 +350,20 @@ class GlRetracer(Retracer): else: Retracer.invokeFunction(self, function) + if function.name == "glBegin": + print ' glretrace::insideGlBeginEnd = true;' + + print r' if (!glretrace::insideList && !glretrace::insideGlBeginEnd && retrace::profiling) {' if profileDraw: - print r' if (!glretrace::insideList && retrace::profileGPU) {' - print r' glretrace::endProfileGPU(call);' - print r' }' + print r' glretrace::endProfile(call, true);' + else: + print r' glretrace::endProfile(call, false);' + print r' }' # Error checking - if function.name == "glBegin": - print ' glretrace::insideGlBeginEnd = true;' - elif function.name.startswith('gl'): + if function.name.startswith('gl'): # glGetError is not allowed inside glBegin/glEnd - print ' if (retrace::debug && !glretrace::insideGlBeginEnd) {' + print ' if (retrace::debug && !glretrace::insideGlBeginEnd && glretrace::getCurrentContext()) {' print ' glretrace::checkGlError(call);' if function.name in ('glProgramStringARB', 'glProgramStringNV'): print r' GLint error_position = -1;' @@ -465,14 +478,20 @@ 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 r' glretrace::Context *currentContext = glretrace::getCurrentContext();' + print ' program = _program_map[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 @@ -509,7 +528,8 @@ if __name__ == '__main__': static bool _pipelineHasBeenBound = false; ''' - api = glapi.glapi - api.addApi(glesapi.glesapi) + api = stdapi.API() + api.addModule(glapi.glapi) + api.addModule(glesapi.glesapi) retracer = GlRetracer() retracer.retraceApi(api)