]> git.cworth.org Git - apitrace/commitdiff
Fix CGL.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 9 Jul 2012 09:47:16 +0000 (10:47 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 9 Jul 2012 09:47:16 +0000 (10:47 +0100)
wrappers/cgltrace.py

index 9dd325350a4742042c99fe8f0f9c95345b7b722b..4bb0c4c304a9ed3cead8f697480f6267d34b0bd9 100644 (file)
@@ -40,38 +40,44 @@ class CglTracer(GlTracer):
         return True
 
     def traceFunctionImplBody(self, function):
+        if function.name == 'CGLReleaseContext':
+            # Unlike other GL APIs like EGL or GLX, CGL will make the context
+            # not current if it's the current context.
+            print '    if (_CGLGetContextRetainCount(ctx) == 1) {'
+            print '        if (gltrace::releaseContext((uintptr_t)ctx)) {'
+            print '            if (_CGLGetCurrentContext() == ctx) {'
+            print '                gltrace::clearContext();'
+            print '            }'
+            print '        }'
+            print '    }'
+
+        if function.name == 'CGLDestroyContext':
+            # The same rule applies here about the  as for CGLReleaseContext.
+            print '    if (gltrace::destroyContext((uintptr_t)ctx)) {'
+            print '        if (_CGLGetCurrentContext() == ctx) {'
+            print '            gltrace::clearContext();'
+            print '        }'
+            print '    }'
+
         GlTracer.traceFunctionImplBody(self, function)
 
         if function.name == 'CGLCreateContext':
-            print '    if (_result == kCGLNoError)'
+            print '    if (_result == kCGLNoError) {'
             print '        gltrace::createContext((uintptr_t)*ctx);'
+            print '    }'
 
         if function.name == 'CGLSetCurrentContext':
             print '    if (_result == kCGLNoError) {'
-            print '        if (ctx != NULL)'
+            print '        if (ctx != NULL) {'
             print '            gltrace::setContext((uintptr_t)ctx);'
-            print '        else'
+            print '        } else {'
             print '            gltrace::clearContext();'
+            print '        }'
             print '    }'
 
         if function.name == 'CGLRetainContext':
             print '    gltrace::retainContext((uintptr_t)ctx);'
 
-        if function.name == 'CGLReleaseContext':
-            # Unlike other GL APIs like EGL or GLX, CGL will make the context
-            # not current if it's the current context.
-            print '    if (gltrace::releaseContext((uintptr_t)ctx)) {'
-            print '        if ((uintptr_t)ctx == gltrace::getContext())'
-            print '            gltrace::clearContext();'
-            print '    }'
-
-        if function.name == 'CGLDestroyContext':
-            # The same rule applies here about the  as for CGLReleaseContext.
-            print '    if (gltrace::destroyContext((uintptr_t)ctx)) {'
-            print '        if ((uintptr_t)ctx == gltrace::getContext())'
-            print '            gltrace::clearContext();'
-            print '    }'
-
 
 if __name__ == '__main__':
     print