+ if function.name in ('glBindProgramPipeline', 'glBindProgramPipelineEXT'):
+ # Note if glBindProgramPipeline has ever been called
+ print r' if (pipeline) {'
+ print r' _pipelineHasBeenBound = true;'
+ print r' }'
+
+ profileDraw = (
+ 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 or
+ function.name == 'glBegin'
+ )
+
+ 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;'
+
+ if function.name == 'glEndList':
+ print r' glretrace::insideList = false;'
+
+ 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':
+ # When dumping state, break down glCreateShaderProgramv so that the
+ # shader source can be recovered.
+ print r' if (retrace::dumpingState) {'
+ print r' GLuint _shader = glCreateShader(type);'
+ print r' if (_shader) {'
+ print r' glShaderSource(_shader, count, strings, NULL);'
+ print r' glCompileShader(_shader);'
+ print r' const GLuint _program = glCreateProgram();'
+ print r' if (_program) {'
+ print r' GLint compiled = GL_FALSE;'
+ print r' glGetShaderiv(_shader, GL_COMPILE_STATUS, &compiled);'
+ print r' glProgramParameteri(_program, GL_PROGRAM_SEPARABLE, GL_TRUE);'
+ print r' if (compiled) {'
+ print r' glAttachShader(_program, _shader);'
+ print r' glLinkProgram(_program);'
+ print r' //glDetachShader(_program, _shader);'
+ print r' }'
+ print r' //append-shader-info-log-to-program-info-log'
+ print r' }'
+ print r' //glDeleteShader(_shader);'
+ print r' _result = _program;'
+ print r' } else {'
+ print r' _result = 0;'
+ print r' }'
+ print r' } else {'
+ Retracer.invokeFunction(self, function)
+ print r' }'
+ else:
+ Retracer.invokeFunction(self, function)
+