#"glFogCoordPointerEXT",
#"glSecondaryColorPointerEXT",
- #"glVertexAttribPointer",
- #"glVertexAttribPointerARB",
- #"glVertexAttribPointerNV",
- #"glVertexAttribLPointer",
+ "glVertexAttribPointer",
+ "glVertexAttribPointerARB",
+ "glVertexAttribPointerNV",
+ "glVertexAttribLPointer",
+ "glVertexAttribLPointerEXT",
#"glMatrixIndexPointerARB",
))
# glGetError is not allowed inside glBegin/glEnd
print ' checkGlError();'
- pointer_function_names = set([
- "glColorPointer",
- #"glColorPointerEXT",
- "glEdgeFlagPointer",
- #"glEdgeFlagPointerEXT",
- "glFogCoordPointer",
- #"glFogCoordPointerEXT",
- "glIndexPointer",
- #"glIndexPointerEXT",
- #"glMatrixIndexPointerARB",
- "glNormalPointer",
- #"glNormalPointerEXT",
- "glSecondaryColorPointer",
- #"glSecondaryColorPointerEXT",
- "glTexCoordPointer",
- #"glTexCoordPointerEXT",
- #"glVertexAttribLPointer",
- #"glVertexAttribPointer",
- #"glVertexAttribPointerARB",
- #"glVertexAttribPointerNV",
- "glVertexPointer",
- #"glVertexPointerEXT",
- ])
-
def extract_arg(self, function, arg, arg_type, lvalue, rvalue):
- if function.name in self.pointer_function_names and arg.name == 'pointer':
+ if function.name in self.array_pointer_function_names and arg.name == 'pointer':
print ' %s = %s.blob();' % (lvalue, rvalue)
return
#define RETRACE
#include "glproc.hpp"
+#include "glstate.hpp"
+
#include <GL/glut.h>
static bool double_buffer = false;
const char *__compare_prefix = NULL;
const char *__snapshot_prefix = NULL;
+unsigned __dump_state = ~0;
+
static void
checkGlError(void) {
while ((call = parser.parse_call())) {
const std::string &name = call->name();
+ if (call->no == __dump_state) {
+ state_dump(std::cout);
+ exit(0);
+ }
+
if ((name[0] == 'w' && name[1] == 'g' && name[2] == 'l') ||
(name[0] == 'g' && name[1] == 'l' && name[2] == 'X')) {
// XXX: We ignore the majority of the OS-specific calls for now
glutSwapBuffers();
else
glFlush();
+
+ // Return now to allow GLUT to resize the window.
+ delete call;
return;
+ } else if (name == "glXMakeCurrent" ||
+ name == "wglMakeCurrent") {
+ glFlush();
+ if (!double_buffer) {
+ frame_complete();
+ // Return now to allow GLUT to resize window.
+ delete call;
+ return;
+ }
} else {
continue;
}
}
if (name == "glFlush") {
+ glFlush();
if (!double_buffer) {
frame_complete();
}
- glFlush();
}
retrace_call(*call);
long long endTime = OS::GetTime();
float timeInterval = (endTime - __startTime) * 1.0E-6;
- std::cout <<
- "Rendered " << __frame << " frames"
- " in " << timeInterval << " secs,"
- " average of " << (__frame/timeInterval) << " fps\n";
+ if (verbosity >= -1) {
+ std::cout <<
+ "Rendered " << __frame << " frames"
+ " in " << timeInterval << " secs,"
+ " average of " << (__frame/timeInterval) << " fps\n";
+ }
if (__wait) {
glutDisplayFunc(&display_noop);
" -db use a double buffer visual\n"
" -s PREFIX take snapshots\n"
" -v verbose output\n"
+ " -D CALLNO dump state at specific call no\n"
" -w wait on final frame\n";
}
break;
} else if (!strcmp(arg, "-b")) {
__benchmark = true;
- --verbosity;
+ verbosity = -1;
} else if (!strcmp(arg, "-c")) {
__compare_prefix = argv[++i];
+ } else if (!strcmp(arg, "-D")) {
+ __dump_state = atoi(argv[++i]);
+ verbosity = -2;
} else if (!strcmp(arg, "-db")) {
double_buffer = true;
} else if (!strcmp(arg, "--help")) {