]> git.cworth.org Git - apitrace/blobdiff - glxtrace.py
tracedump: Add tri-state --color option (auto, always, or never)
[apitrace] / glxtrace.py
index 2a49d25fcf0c18310ba3123c768ae7261425d2d6..70d9c1b9c818b839d59628e8f2aec89a19d5d04c 100644 (file)
@@ -28,9 +28,9 @@
 """GLX tracing generator."""
 
 
-from stdapi import API
-from glapi import glapi
-from glxapi import glxapi
+from specs.stdapi import API
+from specs.glapi import glapi
+from specs.glxapi import glxapi
 from gltrace import GlTracer
 from dispatch import function_pointer_type, function_pointer_value
 
@@ -41,6 +41,23 @@ class GlxTracer(GlTracer):
         # The symbols visible in libGL.so can vary, so expose them all
         return True
 
+    def trace_function_impl_body(self, function):
+        GlTracer.trace_function_impl_body(self, function)
+
+        # Take snapshots
+        if function.name == 'glXSwapBuffers':
+            print '    glsnapshot::snapshot(__call);'
+        if function.name in ('glFinish', 'glFlush'):
+            print '    GLint __draw_framebuffer = 0;'
+            print '    __glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &__draw_framebuffer);'
+            print '    if (__draw_framebuffer == 0) {'
+            print '        GLint __draw_buffer = GL_NONE;'
+            print '        __glGetIntegerv(GL_DRAW_BUFFER, &__draw_buffer);'
+            print '        if (__draw_buffer == GL_FRONT) {'
+            print '             glsnapshot::snapshot(__call);'
+            print '        }'
+            print '    }'
+
     def wrap_ret(self, function, instance):
         GlTracer.wrap_ret(self, function, instance)
 
@@ -66,6 +83,7 @@ if __name__ == '__main__':
     print
     print '#include "glproc.hpp"'
     print '#include "glsize.hpp"'
+    print '#include "glsnapshot.hpp"'
     print
     print 'static __GLXextFuncPtr __unwrap_proc_addr(const GLubyte * procName, __GLXextFuncPtr procPtr);'
     print
@@ -83,7 +101,7 @@ if __name__ == '__main__':
     for f in api.functions:
         ptype = function_pointer_type(f)
         pvalue = function_pointer_value(f)
-        print '    if (!strcmp("%s", (const char *)procName)) {' % f.name
+        print '    if (strcmp("%s", (const char *)procName) == 0) {' % f.name
         print '        %s = (%s)procPtr;' % (pvalue, ptype)
         print '        return (__GLXextFuncPtr)&%s;' % (f.name,)
         print '    }'