X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fglstate_images.cpp;h=598d56cceb8e2746bec9e22fc519609d33667b64;hb=2b4c51753aeb95015fa3fba58654bf44ea18a370;hp=7b0a42473fdf97cbc8c04ad4910247d078d4b2cf;hpb=6083cfc0885f162b532825b23639f0ec2fe285c2;p=apitrace diff --git a/retrace/glstate_images.cpp b/retrace/glstate_images.cpp index 7b0a424..598d56c 100644 --- a/retrace/glstate_images.cpp +++ b/retrace/glstate_images.cpp @@ -745,13 +745,22 @@ getDrawBufferImage() { if (draw_buffer == GL_NONE) { return NULL; } + } else { + // GL_COLOR_ATTACHMENT0 is implied + draw_buffer = GL_COLOR_ATTACHMENT0; } if (!getFramebufferAttachmentDesc(context, framebuffer_target, draw_buffer, desc)) { return NULL; } } else { - if (!context.ES) { + if (context.ES) { + // XXX: Draw buffer is always FRONT for single buffer context, BACK + // for double buffered contexts. There is no way to know which (as + // GL_DOUBLEBUFFER state is also unavailable), so always assume + // double-buffering. + draw_buffer = GL_BACK; + } else { glGetIntegerv(GL_DRAW_BUFFER, &draw_buffer); if (draw_buffer == GL_NONE) { return NULL; @@ -968,16 +977,21 @@ dumpDrawableImages(JSONWriter &json, Context &context) GLint draw_buffer = GL_NONE; if (context.ES) { + // XXX: Draw buffer is always FRONT for single buffer context, BACK for + // double buffered contexts. There is no way to know which (as + // GL_DOUBLEBUFFER state is also unavailable), so always assume + // double-buffering. draw_buffer = GL_BACK; } else { glGetIntegerv(GL_DRAW_BUFFER, &draw_buffer); - glReadBuffer(draw_buffer); } if (draw_buffer != GL_NONE) { + // Read from current draw buffer GLint read_buffer = GL_NONE; if (!context.ES) { glGetIntegerv(GL_READ_BUFFER, &read_buffer); + glReadBuffer(draw_buffer); } GLint alpha_bits = 0; @@ -990,6 +1004,7 @@ dumpDrawableImages(JSONWriter &json, Context &context) dumpReadBufferImage(json, width, height, format); json.endMember(); + // Restore original read buffer if (!context.ES) { glReadBuffer(read_buffer); }