]> git.cworth.org Git - apitrace/blobdiff - glretrace.py
Tweaks.
[apitrace] / glretrace.py
index 606c052e33f3a0c15fd4aa81d0a48ee9509f2f3a..20e48752f937c39e033451a5a198aca83a972830 100644 (file)
 
 import stdapi
 import glapi
-import retrace
-
-
-class GlRetracer(retrace.Retracer):
-
-    pass
+from retrace import Retracer
+
+
+class GlRetracer(Retracer):
+
+    def extract_arg(self, function, arg, arg_type, lvalue, rvalue):
+        if function.name in [
+            "glColorPointer",
+            "glEdgeFlagPointer",
+            "glIndexPointer",
+            "glNormalPointer",
+            "glTexCoordPointer",
+            "glVertexPointer",
+            "glFogCoordPointer",
+            "glSecondaryColorPointer",
+            "glVertexAttribPointer",
+        ] and arg.name == 'pointer':
+            self.extract_pointer(function, arg, arg_type, lvalue, rvalue)
+        else:
+            Retracer.extract_arg(self, function, arg, arg_type, lvalue, rvalue)
+
+    def extract_pointer(self, function, arg, arg_type, lvalue, rvalue):
+        print '    if (dynamic_cast<Trace::Null *>(&%s)) {' % rvalue
+        print '        %s = 0;' % (lvalue)
+        print '    } else {'
+        print '        %s = (%s)(uintptr_t)(%s);' % (lvalue, arg_type, rvalue)
+        print '    }'
 
 
 if __name__ == '__main__':
@@ -46,6 +67,8 @@ if __name__ == '__main__':
     print '#include <GL/glew.h>'
     print '#include <GL/glut.h>'
     print
+    print 'static bool double_buffer = false;'
+    print
     api = glapi.glapi
     retracer = GlRetracer()
     retracer.retrace_api(glapi.glapi)
@@ -59,13 +82,20 @@ static void display(void) {
    Trace::Call *call;
 
    while ((call = parser.parse_call())) {
-      if (call->name == "glFlush" ||
-          call->name == "glXSwapBuffers" ||
-          call->name == "wglSwapBuffers") {
+      if (call->name == "glFlush") {
          glFlush();
          return;
       }
       
+      if (call->name == "glXSwapBuffers" ||
+          call->name == "wglSwapBuffers") {
+         if (double_buffer)
+            glutSwapBuffers();
+         else
+            glFlush();
+         return;
+      }
+      
       retrace_call(*call);
 
       if (call->name == "glBegin") {
@@ -124,18 +154,9 @@ static void idle(void) {
 
 int main(int argc, char **argv)
 {
-   glutInit(&argc, argv);
-   glutInitWindowPosition(0, 0);
-   glutInitWindowSize(800, 600);
-   glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE);
-   glutCreateWindow(argv[0]);
-   glewInit();
 
-   glutDisplayFunc(&display);
-   glutIdleFunc(&idle);
-
-    int i;
-    for (i = 1; i < argc; ++i) {
+   int i;
+   for (i = 1; i < argc; ++i) {
       const char *arg = argv[i];
 
       if (arg[0] != '-') {
@@ -145,7 +166,9 @@ int main(int argc, char **argv)
       if (!strcmp(arg, "--")) {
          break;
       }
-      else if (!strcmp(arg, "-v")) {
+      else if (!strcmp(arg, "-db")) {
+         double_buffer = true;
+      } else if (!strcmp(arg, "-v")) {
          ++verbosity;
       } else {
          std::cerr << "error: unknown option " << arg << "\\n";
@@ -153,6 +176,20 @@ int main(int argc, char **argv)
       }
    }
 
+   glutInit(&argc, argv);
+   glutInitWindowPosition(0, 0);
+   glutInitWindowSize(800, 600);
+   glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | (double_buffer ? GLUT_DOUBLE : GLUT_SINGLE));
+   glutCreateWindow(argv[0]);
+   glewInit();
+
+   glutDisplayFunc(&display);
+   glutIdleFunc(&idle);
+
+   for (GLuint h = 0; h < 1024; ++h) {
+      __list_map[h] = h;
+   }
+
    for ( ; i < argc; ++i) {
       if (parser.open(argv[i])) {
          glutMainLoop();