From: Imre Deak Date: Wed, 23 May 2012 07:56:06 +0000 (+0300) Subject: mt trace: cgl: track GL context on a per-thread basis X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=a4c698dfae954d04b459a9b9543d0404a4c80660;hp=a150c4a0cf9e47931f0e79986f5f79b85aa5905e;p=apitrace mt trace: cgl: track GL context on a per-thread basis Wrap CGL context handling calls and keep our own per-thread basis track of the context object. Signed-off-by: Imre Deak --- diff --git a/wrappers/cgltrace.py b/wrappers/cgltrace.py index e9dee97..9dd3253 100644 --- a/wrappers/cgltrace.py +++ b/wrappers/cgltrace.py @@ -39,6 +39,39 @@ class CglTracer(GlTracer): # 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