X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglstate_images.cpp;h=b055002977d3c351e7b0cf014b45455df1ac6160;hb=d9d9d22837705de6a2c42ad3f9b23223a2b98fe0;hp=37c0ae1da66907acdc4c4e50e4ee7714c5201301;hpb=6f80233c1a7251df2edb1b9f93cee37f4fc152f7;p=apitrace diff --git a/retrace/glstate_images.cpp b/retrace/glstate_images.cpp index 37c0ae1..b055002 100644 --- a/retrace/glstate_images.cpp +++ b/retrace/glstate_images.cpp @@ -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); @@ -1189,7 +1193,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 +1202,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 +1239,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); } }