我正在尝试PBO
使用(在 Android 应用程序上)实现逻辑glReadPixels
,以便异步读取数据。
这样做的动机是应用程序在屏幕上呈现视频,我想截取该视频的屏幕截图,而不会延迟屏幕上的呈现。
我认为带有 PBO 的 glReadPixels 应该立即返回,但返回最多需要 250 毫秒(很像没有 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);