Android OpenGL FBO fuera de pantalla
opengl-es opengl-es-2.0 (2)
Estoy desarrollando una aplicación para Android tipo pintura con los dedos. Estoy usando OpenGL ES 2.0. Básicamente tengo una imagen en la que cada pantalla táctil debe corresponder a un círculo alfa para aplicar donde se muestra la otra imagen que se encuentra debajo. Probé diferentes técnicas, pero son bastante lentas porque funciona como usar glTexSubImage2D orgánico que ralentiza la fase de renderizado. Estoy tratando de entender el uso de FBO, ya que permiten la representación fuera de la pantalla. ¿Alguien puede explicar mejor lo que significa dejar fuera de la pantalla y qué ventajas podría obtener para acelerar mi método?
Supongo que fuera de pantalla significa que puede cambiar el framebuffer creado por mí, fuera del camino en DrawFrame? En otro hilo?
Su aproximación lleva mucho ancho de banda de memoria ya que necesita volver a leer (parte de) la pantalla y volver a escribir la misma cantidad de datos en la memoria de la GPU. Eso es realmente lento y hace que su código de dibujo espere antes de que la imagen se haya movido nuevamente a la GPU antes de renderizar. ¿Has considerado dibujar quads para cada prensa de dedo o algún tipo de primitivo que se aproxime a tus necesidades? ¿Por qué necesitas OpenGL para esto?
Además de poder renderizar en una ventana en pantalla usando OpenGL ES 2.0, también puede renderizar en superficies no visibles no visibles llamadas pbuffers (abreviatura de buffer de píxeles). Pbuffers puede aprovechar al máximo cualquier aceleración de hardware disponible para OpenGL ES 2.0, al igual que una ventana. Los Pbuffers se usan con mayor frecuencia para generar mapas de texturas. Si todo lo que desea hacer es renderizar a una textura, recomendamos usar objetos framebuffer (cubiertos en el Capítulo 12, "Objetos Framebuffer") en lugar de pbuffers porque son más eficientes. Sin embargo, los pbuffers aún pueden ser útiles en algunos casos donde los objetos framebuffer no se pueden usar, como cuando se renderiza una superficie fuera de la pantalla con OpenGL ES y luego se usa como una textura en otra API como OpenVG.
[fuente: guía de programación OpenGL ES 2.0]
Espero que esto ayude. Lea esto detenidamente: "los pbuffers aún pueden ser útiles para renderizar en una superficie fuera de la pantalla con OpenGL ES"