glReadPixels obtiene datos incorrectos en android opengl es 2.0

Obtengo los datos yuv de la cámara y los envío a opengl, luego uso fragment shader para convertir los datos al formato RGBA y mostrarlos en la pantalla. Todo va bien, pero cuando uso glReadPixels para obtener los datos RGBA de framebuffer a int array, obtengo datos incorrectos.

// 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);

Desafortunadamente, obtuve datos incorrectos, los últimos miles de elementos en la matriz son 0, el mismo código funciona bien en iOS, ¿me perdí algo?

Trabajo en Android 4.0.3 y uso OpenGL ES 2 del NDK.

preguntado el 12 de junio de 12 a las 11:06

¿Llamar a glFlush antes de llamar a glReadPixels? -

glGetError también informa de algún error? -

glGetError no informa nada, y usé glFlush antes de glReadPixels, el problema aún existe. ¿Utilizo glReadPixels de forma incorrecta? -

Lo único que puedo pensar es esto del documento: "GL_INVALID_FRAMEBUFFER_OPERATION se genera si el framebuffer enlazado actualmente no está completo (es decir, el valor de retorno de glCheckFramebufferStatus no es GL_FRAMEBUFFER_COMPLETE)". -

Finalmente lo soluciono. El tamaño de glViewPort debe ser el mismo que el de framebuffer, o obtendremos datos incorrectos. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.