Representación fuera de pantalla con PixelBuffer o FBO para guardar todos los gráficos en el mapa de bits (y luego en bmp / ​​jpg) del tamaño deseado (> 4096) con OpenGL ES 2.0

Tengo que tener la capacidad de guardar todos mis gráficos (que me hacen utilizando básicamente código de clase GLSurfaceView) para el archivo de imagen (JPG / BMP).

Elegí enfoque que contiene pasos:

  • Cambiar la representación de la superficie de la ventana a la superficie del buffer del pixel con la anchura / la altura requeridas – en mi caso esto w / h debe ser igual a la foto (mi uso es como el redactor de la foto)
  • Leer píxeles usando glReadPixels de la superficie actual
  • Guarde estos píxeles en Bitmap y luego en JPG / BMP

Pero tengo un problema con este enfoque ya que hay una restricción para la creación de PixelBuffer que es que el tamaño de este búfer no puede ser mayor que EGL constantes: EGL_MAX_PBUFFER_HEIGHT y EGL_MAX_PBUFFER_WIDTH.

Me enteré de que hay una gran cantidad de dispositivos en los que estas constantes iguales 4096 y al mismo tiempo cámara de fotos en estos dispositivos permite tomar fotos cuyo ancho o altura es mayor que 4096. Desafortunadamente esto hace que mi enfoque no es utilizable.

¿Podría usted consejo – cómo pueden todos los gráficos de OpenGL (que se hace sobre una cierta foto en mi caso) se ahorra a JPG / BMP con anchura / altura deseadas (en mi caso es la anchura / la altura originales de la foto) que puede ser mayor que EGL_MAX_PBUFFER_HEIGHT / EGL_MAX_PBUFFER_WIDTH?

EDITAR:

  • Durante la investigación me enteré de que el enfoque de PBuffer es definitivamente malo ya que no está funcionando en todos los dispositivos, tiene problemas con nvidia tegra y también es lento
  • Parece que incluso enfoque FBO (no estoy seguro, sin embargo, estoy investigando ahora) tiene restricción similar – como entiendo en el caso de enfoque FBO necesitaré crear renderbuffer, pero su tamaño también no puede ser Mayor que GL_MAX_RENDERBUFFER_SIZE, que es 4096 en dispositivos android probados.
  • Bueno, parece que necesito usar varios búferes y tal vez puedo tratar de usar MappedByteBuffer para fusionarlos y comprimir a jpg evitando OOM

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.