]> git.cworth.org Git - apitrace/blobdiff - wrappers/cgltrace.py
Fix build. Add copyright header to new files.
[apitrace] / wrappers / cgltrace.py
index ea2267cf1c5ff1c1bb817f9a3069cbc2e3b58b55..9dd325350a4742042c99fe8f0f9c95345b7b722b 100644 (file)
@@ -24,7 +24,7 @@
 ##########################################################################/
 
 
-"""Cgl tracing generator."""
+"""CGL tracing generator."""
 
 
 from gltrace import GlTracer
@@ -36,9 +36,42 @@ from specs.cglapi import cglapi
 class CglTracer(GlTracer):
 
     def isFunctionPublic(self, function):
-        # The symbols visible in libGL.dylib can vary, so expose them all
+        # all OpenGL symbols are visible on MacOSX
         return True
 
+    def traceFunctionImplBody(self, function):
+        GlTracer.traceFunctionImplBody(self, function)
+
+        if function.name == 'CGLCreateContext':
+            print '    if (_result == kCGLNoError)'
+            print '        gltrace::createContext((uintptr_t)*ctx);'
+
+        if function.name == 'CGLSetCurrentContext':
+            print '    if (_result == kCGLNoError) {'
+            print '        if (ctx != NULL)'
+            print '            gltrace::setContext((uintptr_t)ctx);'
+            print '        else'
+            print '            gltrace::clearContext();'
+            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
@@ -58,7 +91,7 @@ if __name__ == '__main__':
     api.addApi(cglapi)
     api.addApi(glapi)
     tracer = CglTracer()
-    tracer.trace_api(api)
+    tracer.traceApi(api)
 
     print r'''