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
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):
print 'namespace glstate {'
print
+ print 'static void'
+ print 'flushErrors(void) {'
+ print ' while (glGetError() != GL_NO_ERROR) {}'
+ print '}'
+ print
+
print 'void'
print 'dumpBoolean(JSONWriter &json, GLboolean value)'
print '{'
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'
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();'
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 ' while (glGetError() != GL_NO_ERROR) {}'
+ print ' flushErrors();'
type, value = getter(*args)
print ' if (glGetError() != GL_NO_ERROR) {'
#print ' std::cerr << "warning: %s(%s) failed\\n";' % (inflection, name)
- print ' while (glGetError() != GL_NO_ERROR) {}'
+ print ' flushErrors();'
print ' } else {'
print ' json.beginMember("%s");' % name
JsonWriter().visit(type, value)