]> git.cworth.org Git - apitrace/blobdiff - wgltrace.py
Add support for GL_APPLE_flush_render
[apitrace] / wgltrace.py
index 6474755ea1898cc1a7a52402b5dffb59079e81e2..d1b6ccfe0e4446b74718389d2581eb0dccf3e769 100644 (file)
 ##########################################################################/
 
 
-from wglapi import wglapi
-from trace import Tracer
-from codegen import *
+"""WGL tracing code generator."""
 
 
-public_symbols = set([
-       "glAccum",
-       "glAlphaFunc",
-       "glAreTexturesResident",
-       "glArrayElement",
-       "glBegin",
-       "glBindTexture",
-       "glBitmap",
-       "glBlendFunc",
-       "glCallList",
-       "glCallLists",
-       "glClear",
-       "glClearAccum",
-       "glClearColor",
-       "glClearDepth",
-       "glClearIndex",
-       "glClearStencil",
-       "glClipPlane",
-       "glColor3b",
-       "glColor3bv",
-       "glColor3d",
-       "glColor3dv",
-       "glColor3f",
-       "glColor3fv",
-       "glColor3i",
-       "glColor3iv",
-       "glColor3s",
-       "glColor3sv",
-       "glColor3ub",
-       "glColor3ubv",
-       "glColor3ui",
-       "glColor3uiv",
-       "glColor3us",
-       "glColor3usv",
-       "glColor4b",
-       "glColor4bv",
-       "glColor4d",
-       "glColor4dv",
-       "glColor4f",
-       "glColor4fv",
-       "glColor4i",
-       "glColor4iv",
-       "glColor4s",
-       "glColor4sv",
-       "glColor4ub",
-       "glColor4ubv",
-       "glColor4ui",
-       "glColor4uiv",
-       "glColor4us",
-       "glColor4usv",
-       "glColorMask",
-       "glColorMaterial",
-       "glColorPointer",
-       "glCopyPixels",
-       "glCopyTexImage1D",
-       "glCopyTexImage2D",
-       "glCopyTexSubImage1D",
-       "glCopyTexSubImage2D",
-       "glCullFace",
-#      "glDebugEntry",
-       "glDeleteLists",
-       "glDeleteTextures",
-       "glDepthFunc",
-       "glDepthMask",
-       "glDepthRange",
-       "glDisable",
-       "glDisableClientState",
-       "glDrawArrays",
-       "glDrawBuffer",
-       "glDrawElements",
-       "glDrawPixels",
-       "glEdgeFlag",
-       "glEdgeFlagPointer",
-       "glEdgeFlagv",
-       "glEnable",
-       "glEnableClientState",
-       "glEnd",
-       "glEndList",
-       "glEvalCoord1d",
-       "glEvalCoord1dv",
-       "glEvalCoord1f",
-       "glEvalCoord1fv",
-       "glEvalCoord2d",
-       "glEvalCoord2dv",
-       "glEvalCoord2f",
-       "glEvalCoord2fv",
-       "glEvalMesh1",
-       "glEvalMesh2",
-       "glEvalPoint1",
-       "glEvalPoint2",
-       "glFeedbackBuffer",
-       "glFinish",
-       "glFlush",
-       "glFogf",
-       "glFogfv",
-       "glFogi",
-       "glFogiv",
-       "glFrontFace",
-       "glFrustum",
-       "glGenLists",
-       "glGenTextures",
-       "glGetBooleanv",
-       "glGetClipPlane",
-       "glGetDoublev",
-       "glGetError",
-       "glGetFloatv",
-       "glGetIntegerv",
-       "glGetLightfv",
-       "glGetLightiv",
-       "glGetMapdv",
-       "glGetMapfv",
-       "glGetMapiv",
-       "glGetMaterialfv",
-       "glGetMaterialiv",
-       "glGetPixelMapfv",
-       "glGetPixelMapuiv",
-       "glGetPixelMapusv",
-       "glGetPointerv",
-       "glGetPolygonStipple",
-       "glGetString",
-       "glGetTexEnvfv",
-       "glGetTexEnviv",
-       "glGetTexGendv",
-       "glGetTexGenfv",
-       "glGetTexGeniv",
-       "glGetTexImage",
-       "glGetTexLevelParameterfv",
-       "glGetTexLevelParameteriv",
-       "glGetTexParameterfv",
-       "glGetTexParameteriv",
-       "glHint",
-       "glIndexMask",
-       "glIndexPointer",
-       "glIndexd",
-       "glIndexdv",
-       "glIndexf",
-       "glIndexfv",
-       "glIndexi",
-       "glIndexiv",
-       "glIndexs",
-       "glIndexsv",
-       "glIndexub",
-       "glIndexubv",
-       "glInitNames",
-       "glInterleavedArrays",
-       "glIsEnabled",
-       "glIsList",
-       "glIsTexture",
-       "glLightModelf",
-       "glLightModelfv",
-       "glLightModeli",
-       "glLightModeliv",
-       "glLightf",
-       "glLightfv",
-       "glLighti",
-       "glLightiv",
-       "glLineStipple",
-       "glLineWidth",
-       "glListBase",
-       "glLoadIdentity",
-       "glLoadMatrixd",
-       "glLoadMatrixf",
-       "glLoadName",
-       "glLogicOp",
-       "glMap1d",
-       "glMap1f",
-       "glMap2d",
-       "glMap2f",
-       "glMapGrid1d",
-       "glMapGrid1f",
-       "glMapGrid2d",
-       "glMapGrid2f",
-       "glMaterialf",
-       "glMaterialfv",
-       "glMateriali",
-       "glMaterialiv",
-       "glMatrixMode",
-       "glMultMatrixd",
-       "glMultMatrixf",
-       "glNewList",
-       "glNormal3b",
-       "glNormal3bv",
-       "glNormal3d",
-       "glNormal3dv",
-       "glNormal3f",
-       "glNormal3fv",
-       "glNormal3i",
-       "glNormal3iv",
-       "glNormal3s",
-       "glNormal3sv",
-       "glNormalPointer",
-       "glOrtho",
-       "glPassThrough",
-       "glPixelMapfv",
-       "glPixelMapuiv",
-       "glPixelMapusv",
-       "glPixelStoref",
-       "glPixelStorei",
-       "glPixelTransferf",
-       "glPixelTransferi",
-       "glPixelZoom",
-       "glPointSize",
-       "glPolygonMode",
-       "glPolygonOffset",
-       "glPolygonStipple",
-       "glPopAttrib",
-       "glPopClientAttrib",
-       "glPopMatrix",
-       "glPopName",
-       "glPrioritizeTextures",
-       "glPushAttrib",
-       "glPushClientAttrib",
-       "glPushMatrix",
-       "glPushName",
-       "glRasterPos2d",
-       "glRasterPos2dv",
-       "glRasterPos2f",
-       "glRasterPos2fv",
-       "glRasterPos2i",
-       "glRasterPos2iv",
-       "glRasterPos2s",
-       "glRasterPos2sv",
-       "glRasterPos3d",
-       "glRasterPos3dv",
-       "glRasterPos3f",
-       "glRasterPos3fv",
-       "glRasterPos3i",
-       "glRasterPos3iv",
-       "glRasterPos3s",
-       "glRasterPos3sv",
-       "glRasterPos4d",
-       "glRasterPos4dv",
-       "glRasterPos4f",
-       "glRasterPos4fv",
-       "glRasterPos4i",
-       "glRasterPos4iv",
-       "glRasterPos4s",
-       "glRasterPos4sv",
-       "glReadBuffer",
-       "glReadPixels",
-       "glRectd",
-       "glRectdv",
-       "glRectf",
-       "glRectfv",
-       "glRecti",
-       "glRectiv",
-       "glRects",
-       "glRectsv",
-       "glRenderMode",
-       "glRotated",
-       "glRotatef",
-       "glScaled",
-       "glScalef",
-       "glScissor",
-       "glSelectBuffer",
-       "glShadeModel",
-       "glStencilFunc",
-       "glStencilMask",
-       "glStencilOp",
-       "glTexCoord1d",
-       "glTexCoord1dv",
-       "glTexCoord1f",
-       "glTexCoord1fv",
-       "glTexCoord1i",
-       "glTexCoord1iv",
-       "glTexCoord1s",
-       "glTexCoord1sv",
-       "glTexCoord2d",
-       "glTexCoord2dv",
-       "glTexCoord2f",
-       "glTexCoord2fv",
-       "glTexCoord2i",
-       "glTexCoord2iv",
-       "glTexCoord2s",
-       "glTexCoord2sv",
-       "glTexCoord3d",
-       "glTexCoord3dv",
-       "glTexCoord3f",
-       "glTexCoord3fv",
-       "glTexCoord3i",
-       "glTexCoord3iv",
-       "glTexCoord3s",
-       "glTexCoord3sv",
-       "glTexCoord4d",
-       "glTexCoord4dv",
-       "glTexCoord4f",
-       "glTexCoord4fv",
-       "glTexCoord4i",
-       "glTexCoord4iv",
-       "glTexCoord4s",
-       "glTexCoord4sv",
-       "glTexCoordPointer",
-       "glTexEnvf",
-       "glTexEnvfv",
-       "glTexEnvi",
-       "glTexEnviv",
-       "glTexGend",
-       "glTexGendv",
-       "glTexGenf",
-       "glTexGenfv",
-       "glTexGeni",
-       "glTexGeniv",
-       "glTexImage1D",
-       "glTexImage2D",
-       "glTexParameterf",
-       "glTexParameterfv",
-       "glTexParameteri",
-       "glTexParameteriv",
-       "glTexSubImage1D",
-       "glTexSubImage2D",
-       "glTranslated",
-       "glTranslatef",
-       "glVertex2d",
-       "glVertex2dv",
-       "glVertex2f",
-       "glVertex2fv",
-       "glVertex2i",
-       "glVertex2iv",
-       "glVertex2s",
-       "glVertex2sv",
-       "glVertex3d",
-       "glVertex3dv",
-       "glVertex3f",
-       "glVertex3fv",
-       "glVertex3i",
-       "glVertex3iv",
-       "glVertex3s",
-       "glVertex3sv",
-       "glVertex4d",
-       "glVertex4dv",
-       "glVertex4f",
-       "glVertex4fv",
-       "glVertex4i",
-       "glVertex4iv",
-       "glVertex4s",
-       "glVertex4sv",
-       "glVertexPointer",
-       "glViewport",
-       "wglChoosePixelFormat",
-       "wglCopyContext",
-       "wglCreateContext",
-       "wglCreateLayerContext",
-       "wglDeleteContext",
-       "wglDescribeLayerPlane",
-       "wglDescribePixelFormat",
-       "wglGetCurrentContext",
-       "wglGetCurrentDC",
-       "wglGetDefaultProcAddress",
-       "wglGetLayerPaletteEntries",
-       "wglGetPixelFormat",
-       "wglGetProcAddress",
-       "wglMakeCurrent",
-       "wglRealizeLayerPalette",
-       "wglSetLayerPaletteEntries",
-       "wglSetPixelFormat",
-       "wglShareLists",
-       "wglSwapBuffers",
-       "wglSwapLayerBuffers",
-       "wglSwapMultipleBuffers",
-       "wglUseFontBitmapsA",
-       "wglUseFontBitmapsW",
-       "wglUseFontOutlinesA",
-       "wglUseFontOutlinesW",
-])
+from stdapi import API
+from glapi import glapi
+from wglapi import wglapi
+from dispatch import function_pointer_type, function_pointer_value
+from gltrace import GlTracer
+from codegen import *
 
-class WglTracer(Tracer):
 
-    def get_function_address(self, function):
-        #print 'DebugBreak();'
-        if function.name in public_symbols:
-            return '__GetProcAddress("%s")' % (function.name,)
-        else:
-            print '        if (!pwglGetProcAddress) {'
-            print '            pwglGetProcAddress = (PwglGetProcAddress)__GetProcAddress("wglGetProcAddress");'
-            print '            if (!pwglGetProcAddress)'
-            print '                Trace::Abort();'
-            print '        }'
-            return 'pwglGetProcAddress("%s")' % (function.name,)
+class WglTracer(GlTracer):
 
     def wrap_ret(self, function, instance):
+        GlTracer.wrap_ret(self, function, instance)
+
         if function.name == "wglGetProcAddress":
             print '    if (%s) {' % instance
         
-            func_dict = dict([(f.name, f) for f in wglapi.functions])
+            func_dict = dict([(f.name, f) for f in glapi.functions + wglapi.functions])
 
             def handle_case(function_name):
                 f = func_dict[function_name]
-                ptype = self.function_pointer_type(f)
-                pvalue = self.function_pointer_value(f)
+                ptype = function_pointer_type(f)
+                pvalue = function_pointer_value(f)
                 print '    %s = (%s)%s;' % (pvalue, ptype, instance)
                 print '    %s = (%s)&%s;' % (instance, function.type, f.name);
         
             def handle_default():
-                print '    OS::DebugMessage("apitrace: unknown function \\"%s\\"\\n", lpszProc);'
+                print '    OS::DebugMessage("apitrace: warning: unknown function \\"%s\\"\\n", lpszProc);'
 
             string_switch('lpszProc', func_dict.keys(), handle_case, handle_default)
             print '    }'
@@ -432,18 +63,17 @@ if __name__ == '__main__':
     print
     print '#define _GDI32_'
     print
-    print '#include "glimports.hpp"'
+    print '#include <string.h>'
+    print '#include <windows.h>'
     print
-    print '#include "trace_write.hpp"'
+    print '#include "trace_writer.hpp"'
     print '#include "os.hpp"'
-    print '#include "glsize.hpp"'
     print
-    print 'extern "C" {'
     print '''
 static HINSTANCE g_hDll = NULL;
 
 static PROC
-__GetProcAddress(LPCSTR lpProcName)
+__getPublicProcAddress(LPCSTR lpProcName)
 {
     if (!g_hDll) {
         char szDll[MAX_PATH] = {0};
@@ -464,7 +94,15 @@ __GetProcAddress(LPCSTR lpProcName)
 }
 
     '''
-    tracer = WglTracer()
-    tracer.trace_api(wglapi)
+    print '// To validate our prototypes'
+    print '#define GL_GLEXT_PROTOTYPES'
+    print '#define WGL_GLXEXT_PROTOTYPES'
     print
-    print '} /* extern "C" */'
+    print '#include "glproc.hpp"'
+    print '#include "glsize.hpp"'
+    print
+    api = API()
+    api.add_api(glapi)
+    api.add_api(wglapi)
+    tracer = WglTracer()
+    tracer.trace_api(api)