]> git.cworth.org Git - apitrace/commitdiff
glretrace: Always pass a format appropriate for the internalFormat when reading pixels.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 26 Sep 2013 16:54:52 +0000 (17:54 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 26 Sep 2013 16:54:52 +0000 (17:54 +0100)
Fixes dumping of GL_RGBA8I framebuffers.

retrace/glstate_images.cpp

index 37c0ae1da66907acdc4c4e50e4ee7714c5201301..549dec709fbac4df6b3cead455a83ad3b4d6f89e 100644 (file)
@@ -506,6 +506,10 @@ internalFormatDescs[] = {
 };
 
 
+/**
+ * Choose the glReadPixels/glGetTexImage format appropriate for the given
+ * internalFormat.
+ */
 static GLenum
 getFormat(GLenum internalFormat)
 {
@@ -534,11 +538,11 @@ dumpActiveTextureLevel(JSONWriter &json, Context &context, GLenum target, GLint
 
     json.beginMember(label);
 
-    GLenum format = getFormat(desc.internalFormat);;
+    GLenum format = getFormat(desc.internalFormat);
     if (context.ES && format == GL_DEPTH_COMPONENT) {
         format = GL_RED;
     }
-    GLuint channels = _gl_format_channels(format);;
+    GLuint channels = _gl_format_channels(format);
 
     image::Image *image = new image::Image(desc.width, desc.height*desc.depth, channels, true);
 
@@ -997,6 +1001,7 @@ dumpReadBufferImage(JSONWriter &json, GLint width, GLint height, GLenum format,
     Context context;
 
     GLenum type = GL_UNSIGNED_BYTE;
+    getFormat(internalFormat);
     image::ChannelType channelType = image::TYPE_UNORM8;
 
     if (format == GL_DEPTH_COMPONENT) {
@@ -1189,7 +1194,7 @@ dumpDrawableImages(JSONWriter &json, Context &context)
  * In the case of a color attachment, it assumes it is already bound for read.
  */
 static void
-dumpFramebufferAttachment(JSONWriter &json, Context &context, GLenum target, GLenum attachment, GLenum format)
+dumpFramebufferAttachment(JSONWriter &json, Context &context, GLenum target, GLenum attachment, GLenum format = GL_NONE)
 {
     ImageDesc desc;
     if (!getFramebufferAttachmentDesc(context, target, attachment, desc)) {
@@ -1198,6 +1203,11 @@ dumpFramebufferAttachment(JSONWriter &json, Context &context, GLenum target, GLe
 
     assert(desc.samples == 0);
 
+    if (format == GL_NONE) {
+        assert(desc.internalFormat != GL_NONE);
+        format = getFormat(desc.internalFormat);
+    }
+
     json.beginMember(enumToString(attachment));
     dumpReadBufferImage(json, desc.width, desc.height, format, desc.internalFormat);
     json.endMember();
@@ -1230,12 +1240,7 @@ dumpFramebufferAttachments(JSONWriter &json, Context &context, GLenum target)
                 std::cerr << "warning: unexpected GL_DRAW_BUFFER" << i << " = " << draw_buffer << "\n";
                 attachment = GL_COLOR_ATTACHMENT0;
             }
-            GLint alpha_size = 0;
-            glGetFramebufferAttachmentParameteriv(target, attachment,
-                                                  GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
-                                                  &alpha_size);
-            GLenum format = alpha_size ? GL_RGBA : GL_RGB;
-            dumpFramebufferAttachment(json, context, target, attachment, format);
+            dumpFramebufferAttachment(json, context, target, attachment);
         }
     }