データを非同期で読み取るために、(Androidアプリで)PBO
ロジックを実装しようとしています。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);