GlReadPixels demasiado lento para usar
Estoy utilizando glReadPixels
para tomar una instantánea a intervalos regulares en el método GLSurfaceView.Renderer
de GLSurfaceView.Renderer
. Necesito tomar esta instantánea en intervalos regulares para guardar guardar mis datos según los requisitos de mi aplicación.
Sin embargo, el rendimiento de glReadPixels
es muy lento y muestra un retraso. He aquí cómo utilizo el método:
- Cómo acelerar la carga / compilación de shader en Android
- Cómo crear un mapa interactivo en Android
- Luz de punto libgdx no funciona en la malla generada
- Señal 11 (SIGSEGV), código 1 (SEGV_MAPERR)
- Está llamando libgdx SpriteBatch método de inicio y fin varias veces caro?
gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);
¿Hay una alternativa para usar glReadPixels
? ¿Cómo puedo guardar la imagen sin causar un retraso?
- Carga rápida de texturas en OpenGL 2.0
- Problemas para que SurfaceTexture funcione con Android Videoplayer en MALI 400
- Simple particle system en Android usando OpenGL ES 1.0
- ¿Los OpenGL Point Sprites funcionan en Android?
- Cómo crear una textura OpenGL de matriz de bytes en Android
- GLSurfaceView dentro del fragmento que no se representa cuando se reinicia
- ¿Por qué eclipsar mi textura con el color?
- Mal rendimiento de Android Canvas.drawBitmap - cambiar a OpenGL?
No sé si eso está disponible en android, pero quizás PBOs (Pixel buffer objects) dará un impulso de rendimiento. Vea este hilo de OpenGL.org .
Sin embargo, no esperes milagros! Con una imagen RGBA de 1280 * 752, está transfiriendo 3.67 MB de datos cada fotograma. No sé las cifras de Android, pero me gustaría apostar que se enfrentan a un ancho de banda de memoria o disco duro de escribir cuello de botella. Si reduce el tamaño de su readPixel y consigue un rendimiento mucho mejor, sabe que ese es el problema.
Además, ¿necesita el componente "A"? Tal vez la lectura de RGB es más rápido. Trate de leer en diferentes formatos. Algunos son mucho más rápidos que otros porque se correlacionan mejor con la representación de memoria OpenGL. Por ejemplo, BGRA puede ser más rápido que RGBA. Cuando se solicita un formato que no coincide con lo que tiene OpenGL, cada píxel debe convertirse durante la operación.