J'ai un nuage de points qui est rendu à l'écran. Chaque point a sa position et sa couleur ainsi qu'un identifiant.
On m'a demandé de rendre les ID de chaque point à une texture, j'ai donc créé un FBO et attaché deux textures, une pour la couleur et une pour la profondeur. J'ai créé le VAO et le VBO nécessaires pour ce rendu hors écran et téléchargé pour chaque point sa position et son ID.
Une fois le rendu sur la FBO terminé, j'ai lu les pixels de la texture de couleur avec glReadPixels()
pour voir quelles sont les valeurs, mais elles semblent toutes effacées, c'est-à-dire que la valeur qu'elles ont est la même que glClearColor()
.
Existe-t-il un moyen de déboguer ce qu'il est en train de rendre à la texture de couleur de mon FBO? Tous les conseils que vous pourriez fournir sont les bienvenus.
J'ai testé plusieurs applications / API / bibliothèques pour obtenir des données des FBO dans des applications qui utilisent gbuffer par exemple. Après des mois de souffrance, j'ai découvert une apitrace disponible sur Github pour déboguer OpenGL, Direct3D et WebGL. J'ai utilisé sous Windows et Linux sans problème.
J'espère que cela pourrait vous être utile.
la source
En plus de la réponse de cifz, une autre façon de visualiser les FBO qui ne coûte pas beaucoup de code est d'utiliser glBlitFramebuffer () pour transférer des pixels d'un framebuffer vers une fenêtre.
Il y a quelques "accrochages" évidents, dans la mesure où les tampons HDR ne visualiseront probablement pas la façon dont vous vous y attendez, vous ne pourrez probablement pas "voir" les tampons de profondeur / stencil de la manière la plus évidente, et si la taille du FBO ne 'ne correspond pas à la zone à nettoyer, la méthode d'agrandissement / minification peut être extrêmement naïve.
Mais comme les hacks rapides et sales vont, c'est assez bon.
la source