]> git.cworth.org Git - apitrace/blobdiff - gltrace.py
Fix a crash when loading multiple frames at once.
[apitrace] / gltrace.py
index 9224bbeb4ba15b0048dcba8a7181721f958acd8a..08fef0026a5bb1a14bba5e9a2b0fd8dd7ef91b86 100644 (file)
 """GL tracing generator."""
 
 
-import stdapi
-import glapi
-import glparams
-from glxapi import glxapi
+import specs.stdapi as stdapi
+import specs.glapi as glapi
+import specs.glparams as glparams
+from specs.glxapi import glxapi
 from trace import Tracer, dump_instance
 
 
@@ -459,7 +459,7 @@ class GlTracer(Tracer):
             Tracer.dispatch_function(self, function)
             print '    GLint active_attributes = 0;'
             print '    __glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &active_attributes);'
-            print '    for (GLuint attrib = 0; attrib < active_attributes; ++attrib) {'
+            print '    for (GLint attrib = 0; attrib < active_attributes; ++attrib) {'
             print '        GLint size = 0;'
             print '        GLenum type = 0;'
             print '        GLchar name[256];'
@@ -477,7 +477,7 @@ class GlTracer(Tracer):
             Tracer.dispatch_function(self, function)
             print '    GLint active_attributes = 0;'
             print '    __glGetObjectParameterivARB(programObj, GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, &active_attributes);'
-            print '    for (GLuint attrib = 0; attrib < active_attributes; ++attrib) {'
+            print '    for (GLint attrib = 0; attrib < active_attributes; ++attrib) {'
             print '        GLint size = 0;'
             print '        GLenum type = 0;'
             print '        GLcharARB name[256];'
@@ -520,6 +520,11 @@ class GlTracer(Tracer):
             print '    }'
             return
 
+        # Override GL extensions
+        if function.name in ('glGetString', 'glGetIntegerv', 'glGetStringi'):
+            Tracer.dispatch_function(self, function, prefix = 'gltrace::__', suffix = '_override')
+            return
+
         Tracer.dispatch_function(self, function)
 
     def emit_memcpy(self, dest, src, length):
@@ -547,16 +552,6 @@ class GlTracer(Tracer):
     def wrap_ret(self, function, instance):
         Tracer.wrap_ret(self, function, instance)
 
-        if function.name == 'glGetString':
-            print '    if (__result) {'
-            print '        switch (name) {'
-            print '        case GL_EXTENSIONS:'
-            print '            __result = gltrace::translateExtensionsString(__result);'
-            print '            break;'
-            print '        default:'
-            print '            break;'
-            print '        }'
-            print '    }'
             
         if function.name in ('glMapBuffer', 'glMapBufferARB'):
             print '    struct buffer_mapping *mapping = get_buffer_mapping(target);'
@@ -825,7 +820,7 @@ class GlTracer(Tracer):
             print '    GLint max_texture_coords = 0;'
             print '    __glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords);'
             print '    for (GLint unit = 0; unit < max_texture_coords; ++unit) {'
-            print '        GLenum texture = GL_TEXTURE0 + unit;'
+            print '        GLint texture = GL_TEXTURE0 + unit;'
             print '        __glClientActiveTexture(texture);'
 
     def array_trace_prolog(self, api, uppercase_name):