source can be recovered.
print r' _pipelineHasBeenBound = true;'
print r' }'
- Retracer.invokeFunction(self, function)
+ 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)
# Error checking
if function.name == "glBegin":
*/
extern bool profiling;
+/**
+ * State dumping.
+ */
+extern bool dumpingState;
+
extern bool doubleBuffer;
extern bool coreProfile;
self.deserializeArgs(function)
+ self.declareRet(function)
self.invokeFunction(function)
self.swizzleValues(function)
self.deserializeArgs(method)
+ self.declareRet(method)
self.invokeInterfaceMethod(interface, method)
self.swizzleValues(method)
visitor = SwizzledValueRegistrator()
visitor.visit(type, lvalue, rvalue)
+ def declareRet(self, function):
+ if function.type is not stdapi.Void:
+ print ' %s _result;' % (function.type)
+
def invokeFunction(self, function):
arg_names = ", ".join(function.argNames())
if function.type is not stdapi.Void:
- print ' %s _result;' % (function.type)
print ' _result = %s(%s);' % (function.name, arg_names)
print ' (void)_result;'
else:
arg_names = ", ".join(method.argNames())
if method.type is not stdapi.Void:
- print ' %s _result;' % (method.type)
print ' _result = _this->%s(%s);' % (method.name, arg_names)
print ' (void)_result;'
else:
int verbosity = 0;
bool debug = true;
bool profiling = false;
+bool dumpingState = false;
bool doubleBuffer = true;
extern "C"
int main(int argc, char **argv)
{
+ using namespace retrace;
+
assert(compareFrequency.empty());
assert(snapshotFrequency.empty());
}
} else if (!strcmp(arg, "-D")) {
dumpStateCallNo = atoi(argv[++i]);
+ dumpingState = true;
retrace::verbosity = -2;
} else if (!strcmp(arg, "-core")) {
retrace::coreProfile = true;