]> git.cworth.org Git - apitrace/blobdiff - retrace/glstate_params.py
Check for ARB_sampler_objects before dumping its state.
[apitrace] / retrace / glstate_params.py
index 54e0c673e22b822356fe18b2ed63eeef0a0ec439..64ac02d4f7e47448b885e62be790455e8eaeea14 100644 (file)
@@ -173,7 +173,9 @@ class StateGetter(Visitor):
             print '    %s *%s = _allocator.alloc<%s>(%s + 1);' % (elem_type, temp_name, elem_type, array_length)
         print '    memset(%s, 0, %s * sizeof *%s);' % (temp_name, array_length, temp_name)
         print '    %s[%s] = (%s)0xdeadc0de;' % (temp_name, array_length, elem_type)
-        print '    %s(%s, %s);' % (inflection + self.suffix, ', '.join(args), temp_name)
+        print '    if (%s) {' % array_length
+        print '        %s(%s, %s);' % (inflection + self.suffix, ', '.join(args), temp_name)
+        print '    }'
         # Simple buffer overflow detection
         print '    assert(%s[%s] == (%s)0xdeadc0de);' % (temp_name, array_length, elem_type)
         return temp_name
@@ -206,6 +208,7 @@ glGetShader = StateGetter('glGetShaderiv', {I: 'iv'})
 glGetProgram = StateGetter('glGetProgram', {I: 'iv'})
 glGetProgramARB = StateGetter('glGetProgram', {I: 'iv', F: 'fv', S: 'Stringv'}, 'ARB')
 glGetFramebufferAttachmentParameter = StateGetter('glGetFramebufferAttachmentParameter', {I: 'iv'})
+glGetSamplerParameter = StateGetter('glGetSamplerParameter', {I: 'iv', F: 'fv'})
 
 
 class JsonWriter(Visitor):
@@ -418,6 +421,24 @@ class StateDumper:
         print '    }'
         print
 
+    def dump_sampler_params(self):
+        print '    // GL_SAMPLER_BINDING'
+        print '    if (context.ARB_sampler_objects) {'
+        print '        GLint sampler_binding = 0;'
+        print '        glGetIntegerv(GL_SAMPLER_BINDING, &sampler_binding);'
+        print '        json.beginMember("GL_SAMPLER_BINDING");'
+        print '        json.writeInt(sampler_binding);'
+        print '        json.endMember();'
+        print '        if (sampler_binding) {'
+        print '            json.beginMember("GL_SAMPLER");'
+        print '            json.beginObject();'
+        for _, _, name in glGetSamplerParameter.iter():
+            self.dump_atom(glGetSamplerParameter, 'sampler_binding', name)
+        print '           json.endObject();'
+        print '           json.endMember(); // GL_SAMPLER'
+        print '       }'
+        print '    }'
+
     def texenv_param_target(self, name):
         if name == 'GL_TEXTURE_LOD_BIAS':
            return 'GL_TEXTURE_FILTER_CONTROL'
@@ -484,6 +505,7 @@ class StateDumper:
         for target, binding in texture_targets:
             print '            dumpTextureTargetParameters(json, context, %s, %s);' % (target, binding)
         print '            if (unit < max_texture_coords) {'
+        self.dump_sampler_params()
         self.dump_texenv_params()
         print '            }'
         print '            json.endObject();'
@@ -533,17 +555,11 @@ class StateDumper:
 
     def dump_atoms(self, getter, *args):
         for _, _, name in getter.iter():
-            self.dump_atom(getter, *(args + (name,))) 
+            self.dump_atom(getter, *(args + (name,)))
 
     def dump_atom(self, getter, *args):
         name = args[-1]
 
-        # Avoid crash on MacOSX
-        # XXX: The right fix would be to look at the support extensions..
-        import platform
-        if name == 'GL_SAMPLER_BINDING' and platform.system() == 'Darwin':
-            return
-
         print '        // %s' % name
         print '        {'
         print '            flushErrors();'