X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glstate.py;h=c348d2b99b69dd2273ca30067f6a5c1fe237f7c6;hb=8d6f8f3b24af9a1a788f2385e8de8855605f0ac7;hp=38084151979f6ad62aaed2381efc687b1738cfaa;hpb=2e3fff6025fac330cbf00c8b81766dcbcf6298b5;p=apitrace diff --git a/glstate.py b/glstate.py index 3808415..c348d2b 100644 --- a/glstate.py +++ b/glstate.py @@ -41,6 +41,10 @@ texture_targets = [ ('GL_TEXTURE_CUBE_MAP', 'GL_TEXTURE_BINDING_CUBE_MAP') ] +framebuffer_targets = [ + ('GL_DRAW_FRAMEBUFFER', 'GL_DRAW_FRAMEBUFFER_BINDING'), + ('GL_READ_FRAMEBUFFER', 'GL_READ_FRAMEBUFFER_BINDING'), +] class GetInflector: '''Objects that describes how to inflect.''' @@ -175,6 +179,7 @@ glGetTexLevelParameter = StateGetter('glGetTexLevelParameter', {I: 'iv', F: 'fv' 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'}) class JsonWriter(Visitor): @@ -254,6 +259,13 @@ class StateDumper: print '}' print + print 'static void' + print 'dumpFramebufferAttachementParameters(JSONWriter &json, GLenum target, GLenum attachment)' + print '{' + self.dump_attachment_parameters('target', 'attachment') + print '}' + print + print 'void' print 'dumpEnum(JSONWriter &json, GLenum pname)' print '{' @@ -279,6 +291,7 @@ class StateDumper: self.dump_texenv_params() self.dump_program_params() self.dump_texture_parameters() + self.dump_framebuffer_parameters() print ' json.endObject();' print ' json.endMember(); // parameters' @@ -367,13 +380,18 @@ class StateDumper: print ' json.beginMember(name);' print ' glActiveTexture(GL_TEXTURE0 + unit);' print ' json.beginObject();' - print ' GLint texture;' + print ' GLboolean enabled;' + print ' GLint binding;' print for target, binding in texture_targets: print ' // %s' % target - print ' texture = 0;' - print ' glGetIntegerv(%s, &texture);' % binding - print ' if (glIsEnabled(%s) || texture) {' % target + print ' enabled = GL_FALSE;' + print ' glGetBooleanv(%s, &enabled);' % target + print ' json.writeBoolMember("%s", enabled);' % target + print ' binding = 0;' + print ' glGetIntegerv(%s, &binding);' % binding + print ' json.writeNumberMember("%s", binding);' % binding + print ' if (enabled || binding) {' print ' json.beginMember("%s");' % target print ' json.beginObject();' self.dump_atoms(glGetTexParameter, target) @@ -390,6 +408,44 @@ class StateDumper: print ' }' print + def dump_framebuffer_parameters(self): + print ' {' + print ' GLint max_color_attachments = 0;' + print ' glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);' + print ' GLint framebuffer;' + for target, binding in framebuffer_targets: + print ' // %s' % target + print ' framebuffer = 0;' + print ' glGetIntegerv(%s, &framebuffer);' % binding + print ' if (framebuffer) {' + print ' json.beginMember("%s");' % target + print ' json.beginObject();' + print ' for (GLint i = 0; i < max_color_attachments; ++i) {' + print ' GLint color_attachment = GL_COLOR_ATTACHMENT0 + i;' + print ' dumpFramebufferAttachementParameters(json, %s, color_attachment);' % target + print ' }' + print ' dumpFramebufferAttachementParameters(json, %s, GL_DEPTH_ATTACHMENT);' % target + print ' dumpFramebufferAttachementParameters(json, %s, GL_STENCIL_ATTACHMENT);' % target + print ' json.endObject();' + print ' json.endMember(); // %s' % target + print ' }' + print + print ' }' + print + + def dump_attachment_parameters(self, target, attachment): + print ' {' + print ' GLint object_type = GL_NONE;' + print ' glGetFramebufferAttachmentParameteriv(%s, %s, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &object_type);' % (target, attachment) + print ' if (object_type != GL_NONE) {' + print ' json.beginMember(enumToString(%s));' % attachment + print ' json.beginObject();' + self.dump_atoms(glGetFramebufferAttachmentParameter, target, attachment) + print ' json.endObject();' + print ' json.endMember(); // GL_x_ATTACHMENT' + print ' }' + print ' }' + def dump_atoms(self, getter, *args): for function, type, count, name in parameters: inflection = getter.inflector.radical + getter.suffix