2

camera から yuv データを取得して opengl に送信し、フラグメント シェーダーを使用してデータを RGBA 形式に変換し、画面に表示します。すべてうまくいきますが、glReadPixels を使用して RGBA データをフレームバッファから int 配列に取得すると、間違ったデータが取得されます。

// I use VBO to draw
glBindBuffer(GL_ARRAY_BUFFER, squareVerticesBufferID);
glVertexAttribPointer(gvPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(gvPositionHandle);
glBindBuffer(GL_ARRAY_BUFFER, textureVerticesBuferID);
glVertexAttribPointer(gvTextureHandle, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(gvTextureHandle);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, squareVerticesIndexBufferID);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, 0);

// Then I use glReadPixels to read the RGBA data
unsigned char *returnDataPointer = (unsigned char*) malloc(width * height * 4);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, returnDataPointer);

残念ながら、私は間違ったデータを取得します。配列の最後の数千の要素は 0 です。同じコードが ios でもうまく機能します。

私は Android 4.0.3 で作業しており、NDK の OpenGL ES 2 を使用しています。

4

0 に答える 0