2011-11-22 26 views
5

Estoy usando glReadPixels para tomar una instantánea a intervalos regulares en el método de GLSurfaceView.Renderer. Necesito tomar esta instantánea a intervalos regulares para seguir guardando mis datos según los requisitos de mi aplicación.glReadPixels demasiado lento para usar

Sin embargo, el rendimiento de glReadPixels es muy lento y muestra un retraso. Así es como yo uso el método:

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb); 

¿Hay una alternativa a usar glReadPixels? ¿Cómo puedo guardar la imagen sin causar un retraso?

+2

Hola al azar, me pregunto si resolvió este problema de alguna manera? Estoy frente a un cuello de botella glReadPixels similar. Veo que la respuesta de Bernie fue aceptada. ¿Ayudaron las PBO o el cambio de formato de color? –

Respuesta

10

No sé si eso está disponible en Android, pero tal vez PBO (objetos de memoria de píxeles) dará un impulso de rendimiento. Vea esto OpenGL.org thread.

Sin embargo, no esperes milagros! Con una imagen RGBA de 1280 * 752, está transfiriendo 3,67 MB de datos en cada cuadro. No conozco las cifras para Android, pero apostaría a que enfrenta un ancho de banda de memoria o un cuello de botella de escritura en el disco duro. Si reduces el tamaño de tu lecturaPixel y obtienes un rendimiento mucho mejor, sabes que ese es el problema.

Además, ¿necesita el componente "A"? Tal vez leer de nuevo RGB es más rápido. Intenta leer de nuevo en diferentes formatos. Algunos son manera más rápidos que otros porque se asignan mejor a la representación de memoria OpenGL. Por ejemplo, BGRA podría ser más rápido que RGBA. Cuando solicita un formato que no coincide con lo que OpenGL tiene, cada píxel debe convertirse durante la operación.

Cuestiones relacionadas