将glReadPixels与PBO一起使用不会提高性能(GLES3)

时间:2016-05-26 18:35:51

标签: android opengl-es glreadpixels opengl-es-3.0 pbo

我正在尝试使用PBO(在Android应用上)实现glReadPixels逻辑,以便异步读取数据。

这样做的动机是应用程序在屏幕上呈现视频,我想截取该视频的屏幕截图,而不会延迟屏幕上的渲染。

我认为带有PBO的glReadPixels应该立即返回,但返回需要250ms(很像没有pbo的常规glReadPixels)。

知道为什么吗? (即使没有使用glMapBufferRange实际读取数据也会发生这种情况,这实际上非常快)

这是我的代码:

GLuint pbo_size = mScreenWidth*mScreenHeight*4;
GLGenBuffers(1, &mPboId);
GLBindBuffer(GL_PIXEL_PACK_BUFFER, mPboId);
GLBufferData(GL_PIXEL_PACK_BUFFER, pbo_size, 0, GL_DYNAMIC_READ);
GLBindBuffer(GL_PIXEL_PACK_BUFFER, 0);

GLReadBuffer(GL_BACK);
GLBindBuffer(GL_PIXEL_PACK_BUFFER, mPboId);
// This next line of code takes ~250ms
GLReadPixels(0, 0, mScreenWidth, mScreenHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0);
GLBindBuffer(GL_PIXEL_PACK_BUFFER, 0);

0 个答案:

没有答案