Tengo una nube de puntos que se muestra en la pantalla. Cada punto tiene su posición y color, así como una identificación.
Me pidieron que representara las ID de cada punto en una textura, así que creé un FBO y adjunté dos texturas, una para el color y otra para la profundidad. Creé el VAO y VBO necesarios para esta representación fuera de la pantalla y cargué para cada punto su posición e ID.
Una vez que se realiza el renderizado al FBO, leo los píxeles de la textura de color glReadPixels()
para ver cuáles son los valores, pero parece que se borran todos, es decir, el valor que tienen es el mismo glClearColor()
.
¿Hay alguna forma de depurar lo que se procesa en la textura de color de mi FBO? Cualquier sugerencia que pueda proporcionar es muy bienvenida.
Probé varias aplicaciones / API / bibliotecas para obtener datos de FBO en aplicaciones que usan gbuffer, por ejemplo. Después de meses de sufrimiento descubrí una apática disponible en Github para depurar OpenGL, Direct3D y WebGL. Utilicé en Windows y Linux sin problemas.
Espero que te sea útil.
fuente
Además de la respuesta de cifz, otra forma de visualizar FBO que no cuesta mucho código es usar glBlitFramebuffer () para transferir píxeles de un framebuffer a una ventana.
Hay algunas "trampas" obvias, en el sentido de que los buffers HDR probablemente no visualizarán la forma en que espera que lo hagan, probablemente no pueda "ver" los buffers de profundidad / plantilla de la manera obvia, y si el tamaño del FBO no Si no coincide con el área que se está desplazando, el método de aumento / minificación podría ser extremadamente ingenuo.
Pero a medida que avanzan los trucos rápidos y sucios, es bastante bueno.
fuente