Merge "gltrace: attach contents of the appropriate framebuffer"
This commit is contained in:
commit
59511ad1cb
|
@ -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];
|
||||
|
|
|
@ -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 */
|
||||
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
@ -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;
|
||||
|
|
|
@ -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…
Reference in New Issue