我从相机获取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。