c2ca836b17
CaptureDraw specifies how many glDrawArrays/Elements to glReadPixel CaptureSwap similarly applies to eglSwapBuffers Change-Id: Ie7a7e3392b4ecdc0659dcee04f4bab97c35267dc Signed-off-by: David Li <davidxli@google.com>
55 lines
2.1 KiB
C++
55 lines
2.1 KiB
C++
/*
|
|
** Copyright 2011, The Android Open Source Project
|
|
**
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
** you may not use this file except in compliance with the License.
|
|
** You may obtain a copy of the License at
|
|
**
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
**
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
*/
|
|
|
|
#include "header.h"
|
|
|
|
EGLBoolean Debug_eglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
|
|
{
|
|
DbgContext * const dbg = getDbgContextThreadSpecific();
|
|
glesv2debugger::Message msg;
|
|
struct : public FunctionCall {
|
|
EGLDisplay dpy;
|
|
EGLSurface draw;
|
|
|
|
const int * operator()(gl_hooks_t::gl_t const * const _c, glesv2debugger::Message & msg) {
|
|
msg.set_time(-1);
|
|
return reinterpret_cast<const int *>(true);
|
|
}
|
|
} caller;
|
|
caller.dpy = dpy;
|
|
caller.draw = draw;
|
|
|
|
msg.set_arg0(reinterpret_cast<int>(dpy));
|
|
msg.set_arg1(reinterpret_cast<int>(draw));
|
|
if (dbg->captureSwap > 0) {
|
|
dbg->captureSwap--;
|
|
int viewport[4] = {};
|
|
dbg->hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport);
|
|
void * pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
|
|
dbg->readBytesPerPixel);
|
|
dbg->hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2],
|
|
viewport[3], dbg->readFormat, dbg->readType, pixels);
|
|
dbg->CompressReadPixelBuffer(msg.mutable_data());
|
|
msg.set_data_type(msg.ReferencedImage);
|
|
msg.set_pixel_format(dbg->readFormat);
|
|
msg.set_pixel_type(dbg->readType);
|
|
msg.set_image_width(viewport[2]);
|
|
msg.set_image_height(viewport[3]);
|
|
}
|
|
int * ret = MessageLoop(caller, msg, glesv2debugger::Message_Function_eglSwapBuffers);
|
|
return static_cast<EGLBoolean>(reinterpret_cast<int>(ret));
|
|
}
|