X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wgltrace.py;h=17d1acc7b6a054570767b0ff3c4a33c7aa955da0;hb=e0df952b67f3ae38aeb0fd7e32942f8fa53ac49f;hp=11da692dda9c3a9f6e11e1e678f4c47a0e55b4e0;hpb=c6b49ce0258320f1981819f10c94c9c28a604b2b;p=apitrace diff --git a/wgltrace.py b/wgltrace.py index 11da692..17d1acc 100644 --- a/wgltrace.py +++ b/wgltrace.py @@ -24,404 +24,38 @@ ##########################################################################/ -from wglapi import wglapi -from trace import Tracer +"""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 - else_ = '' - for f in wglapi.functions: - ptype = self.function_pointer_type(f) - pvalue = self.function_pointer_value(f) - print ' %sif (!strcmp("%s", lpszProc)) {' % (else_, f.name) - print ' %s = (%s)%s;' % (pvalue, ptype, instance) - print ' %s = (%s)&%s;' % (instance, function.type, f.name); - print ' }' - else_ = 'else ' - print ' %s{' % (else_,) - print ' OS::DebugMessage("apitrace: unknown function \\"%s\\"\\n", lpszProc);' - print ' }' + + func_dict = dict([(f.name, f) for f in glapi.functions + wglapi.functions]) + + def handle_case(function_name): + f = func_dict[function_name] + 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: warning: unknown function \\"%s\\"\\n", lpszProc);' + + string_switch('lpszProc', func_dict.keys(), handle_case, handle_default) print ' }' @@ -429,18 +63,17 @@ if __name__ == '__main__': print print '#define _GDI32_' print - print '#include "glimports.hpp"' + print '#include ' + print '#include ' 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) +PROC +__getPublicProcAddress(LPCSTR lpProcName) { if (!g_hDll) { char szDll[MAX_PATH] = {0}; @@ -461,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)