我从 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。