Loading opengl/libs/GLES_trace/src/gltrace_context.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -82,19 +82,33 @@ void GLTraceContext::resizeFBMemory(unsigned minSize) { /** obtain a pointer to the compressed framebuffer image */ void GLTraceContext::getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight) { unsigned *fbheight, FBBinding fbToRead) { int viewport[4] = {}; hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport); unsigned fbContentsSize = viewport[2] * viewport[3] * 4; resizeFBMemory(fbContentsSize); //TODO: On eglSwapBuffer, read FB0. For glDraw calls, read currently // bound FB. //hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, &bound_fb); //hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0); // switch current framebuffer binding if necessary GLint currentFb = -1; bool fbSwitched = false; if (fbToRead != CURRENTLY_BOUND_FB) { hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, ¤tFb); if (currentFb != 0) { hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0); fbSwitched = true; } } hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3], GL_RGBA, GL_UNSIGNED_BYTE, fbcontents); // switch back to previously bound buffer if necessary if (fbSwitched) { hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, currentFb); } *fbsize = lzf_compress(fbcontents, fbContentsSize, fbcompressed, fbContentsSize); *fb = fbcompressed; *fbwidth = viewport[2]; Loading opengl/libs/GLES_trace/src/gltrace_context.h +5 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ namespace gltrace { using ::android::gl_hooks_t; enum FBBinding {CURRENTLY_BOUND_FB, FB0}; class GLTraceContext { void *fbcontents; /* memory area to read framebuffer contents */ void *fbcompressed; /* destination for lzf compressed framebuffer */ Loading @@ -34,7 +36,9 @@ public: gl_hooks_t *hooks; GLTraceContext(); void getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight); void getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight, FBBinding fbToRead); }; GLTraceContext *getGLTraceContext(); Loading opengl/libs/GLES_trace/src/gltrace_egl.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ void GLTrace_eglSwapBuffers(void *dpy, void *draw) { glmessage.set_context_id(1); glmessage.set_function(GLMessage::eglSwapBuffers); fixup_addFBContents(&glmessage); // read FB0 since that is what is displayed on the screen fixup_addFBContents(&glmessage, FB0); traceGLMessage(&glmessage); } Loading opengl/libs/GLES_trace/src/gltrace_fixup.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -96,10 +96,10 @@ void fixup_glGetString(GLMessage *glmsg) { } /* Add the contents of the framebuffer to the protobuf message */ void fixup_addFBContents(GLMessage *glmsg) { void fixup_addFBContents(GLMessage *glmsg, FBBinding fbToRead) { void *fbcontents; unsigned fbsize, fbwidth, fbheight; getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight); getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight, fbToRead); GLMessage_FrameBuffer *fb = glmsg->mutable_fb(); fb->set_width(fbwidth); Loading Loading @@ -299,7 +299,7 @@ void fixupGLMessage(GLMessage *glmsg) { case GLMessage::glDrawElements: /* void glDrawArrays(GLenum mode, GLint first, GLsizei count) */ /* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) */ fixup_addFBContents(glmsg); fixup_addFBContents(glmsg, CURRENTLY_BOUND_FB); break; default: break; Loading opengl/libs/GLES_trace/src/gltrace_fixup.h +4 −3 Original line number Diff line number Diff line Loading @@ -14,16 +14,17 @@ * limitations under the License. */ #include "gltrace.pb.h" #ifndef __GLTRACE_FIXUP_H_ #define __GLTRACE_FIXUP_H_ #include "gltrace.pb.h" #include "gltrace_context.h" namespace android { namespace gltrace { void fixupGLMessage(GLMessage *message); void fixup_addFBContents(GLMessage *message); void fixup_addFBContents(GLMessage *message, FBBinding fbToRead); }; }; Loading Loading
opengl/libs/GLES_trace/src/gltrace_context.cpp +19 −5 Original line number Diff line number Diff line Loading @@ -82,19 +82,33 @@ void GLTraceContext::resizeFBMemory(unsigned minSize) { /** obtain a pointer to the compressed framebuffer image */ void GLTraceContext::getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight) { unsigned *fbheight, FBBinding fbToRead) { int viewport[4] = {}; hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport); unsigned fbContentsSize = viewport[2] * viewport[3] * 4; resizeFBMemory(fbContentsSize); //TODO: On eglSwapBuffer, read FB0. For glDraw calls, read currently // bound FB. //hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, &bound_fb); //hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0); // switch current framebuffer binding if necessary GLint currentFb = -1; bool fbSwitched = false; if (fbToRead != CURRENTLY_BOUND_FB) { hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, ¤tFb); if (currentFb != 0) { hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0); fbSwitched = true; } } hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3], GL_RGBA, GL_UNSIGNED_BYTE, fbcontents); // switch back to previously bound buffer if necessary if (fbSwitched) { hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, currentFb); } *fbsize = lzf_compress(fbcontents, fbContentsSize, fbcompressed, fbContentsSize); *fb = fbcompressed; *fbwidth = viewport[2]; Loading
opengl/libs/GLES_trace/src/gltrace_context.h +5 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ namespace gltrace { using ::android::gl_hooks_t; enum FBBinding {CURRENTLY_BOUND_FB, FB0}; class GLTraceContext { void *fbcontents; /* memory area to read framebuffer contents */ void *fbcompressed; /* destination for lzf compressed framebuffer */ Loading @@ -34,7 +36,9 @@ public: gl_hooks_t *hooks; GLTraceContext(); void getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight); void getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight, FBBinding fbToRead); }; GLTraceContext *getGLTraceContext(); Loading
opengl/libs/GLES_trace/src/gltrace_egl.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ void GLTrace_eglSwapBuffers(void *dpy, void *draw) { glmessage.set_context_id(1); glmessage.set_function(GLMessage::eglSwapBuffers); fixup_addFBContents(&glmessage); // read FB0 since that is what is displayed on the screen fixup_addFBContents(&glmessage, FB0); traceGLMessage(&glmessage); } Loading
opengl/libs/GLES_trace/src/gltrace_fixup.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -96,10 +96,10 @@ void fixup_glGetString(GLMessage *glmsg) { } /* Add the contents of the framebuffer to the protobuf message */ void fixup_addFBContents(GLMessage *glmsg) { void fixup_addFBContents(GLMessage *glmsg, FBBinding fbToRead) { void *fbcontents; unsigned fbsize, fbwidth, fbheight; getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight); getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight, fbToRead); GLMessage_FrameBuffer *fb = glmsg->mutable_fb(); fb->set_width(fbwidth); Loading Loading @@ -299,7 +299,7 @@ void fixupGLMessage(GLMessage *glmsg) { case GLMessage::glDrawElements: /* void glDrawArrays(GLenum mode, GLint first, GLsizei count) */ /* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) */ fixup_addFBContents(glmsg); fixup_addFBContents(glmsg, CURRENTLY_BOUND_FB); break; default: break; Loading
opengl/libs/GLES_trace/src/gltrace_fixup.h +4 −3 Original line number Diff line number Diff line Loading @@ -14,16 +14,17 @@ * limitations under the License. */ #include "gltrace.pb.h" #ifndef __GLTRACE_FIXUP_H_ #define __GLTRACE_FIXUP_H_ #include "gltrace.pb.h" #include "gltrace_context.h" namespace android { namespace gltrace { void fixupGLMessage(GLMessage *message); void fixup_addFBContents(GLMessage *message); void fixup_addFBContents(GLMessage *message, FBBinding fbToRead); }; }; Loading