我正在尝试使用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);