from gltrace import GlTracer
-from specs.stdapi import API
+from specs.stdapi import Module, API
from specs.glapi import glapi
from specs.wglapi import wglapi
"wglGetProcAddress",
]
+ createContextFunctionNames = [
+ 'wglCreateContext',
+ 'wglCreateContextAttribsARB',
+ 'wglCreateLayerContext',
+ ]
+
+ destroyContextFunctionNames = [
+ 'wglDeleteContext',
+ ]
+
+ makeCurrentFunctionNames = [
+ 'wglMakeCurrent',
+ 'wglMakeContextCurrentARB',
+ 'wglMakeContextCurrentEXT',
+ ]
+
def traceFunctionImplBody(self, function):
+ if function.name in self.destroyContextFunctionNames:
+ # Unlike other GL APIs like EGL or GLX, WGL will make the context
+ # inactive if it's currently the active context.
+ print ' if (_wglGetCurrentContext() == hglrc) {'
+ print ' gltrace::clearContext();'
+ print ' }'
+ print ' gltrace::releaseContext((uintptr_t)hglrc);'
+
GlTracer.traceFunctionImplBody(self, function)
- if function.name == 'wglCreateContext':
+ if function.name in self.createContextFunctionNames:
print ' if (_result)'
print ' gltrace::createContext((uintptr_t)_result);'
- if function.name == 'wglMakeCurrent':
+ if function.name in self.makeCurrentFunctionNames:
print ' if (_result) {'
print ' if (hglrc != NULL)'
print ' gltrace::setContext((uintptr_t)hglrc);'
print ' gltrace::clearContext();'
print ' }'
- if function.name == 'wglDeleteContext':
- print ' gltrace::Context *current_ctx = gltrace::getContext();'
- # Unlike other GL APIs like EGL or GLX, WGL will make the context
- # inactive if it's currently the active context.
- print ' if (current_ctx == (uintptr_t)hglrc)'
- print ' gltrace::clearContext();'
- print ' gltrace::destroyContext((uintptr_t)ctx);'
-
if __name__ == '__main__':
print
print '#include "glproc.hpp"'
print '#include "glsize.hpp"'
print
+ module = Module()
+ module.mergeModule(glapi)
+ module.mergeModule(wglapi)
api = API()
- api.addApi(glapi)
- api.addApi(wglapi)
+ api.addModule(module)
tracer = WglTracer()
tracer.traceApi(api)