4

データを非同期で読み取るために、(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);
4

0 に答える 0