Comment puis-je déboguer ce qui est rendu à un objet Frame Buffer dans OpenGL?


17

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.

Réponses:


21

Généralement, pour voir ce qui est rendu dans les différentes étapes de votre pipeline, je suggère l'utilisation d'un outil d'analyse de trame. Ceux-ci vous fournissent généralement une vue sur le contenu de chaque tampon pour chaque appel d'API et cela peut vous aider dans votre situation.

Un très bon est Renderdoc qui est à la fois entièrement gratuit et open source . Il est également activement soutenu.

Un autre est Intel GPA qui, malheureusement, selon sa page Web, prend en charge jusqu'à OGL 3.3 Core.

Juste pour en ajouter un de plus, j'avais l'habitude d'utiliser gDEBugger , mais il s'est écoulé depuis la dernière mise à jour. Cela a évolué en AMD CodeXL que je n'ai malheureusement jamais utilisé.


De plus, j'ai parfois une commande qui transfère un fbo spécifié vers une image lorsque j'appuie sur une touche. C'est la voie low-tech.
Jorge Rodriguez

C'est aussi probablement une bonne idée de vous assurer que vous avez la bonne configuration de test de profondeur, pour le rendu entrant dans votre visualisation FBO.
rys

J'utilise toujours gDEbugger de temps en temps pour les anciennes versions GL. CodeXL est la version la plus moderne et peut être trouvée ici: github.com/GPUOpen-Tools/CodeXL Notez qu'il y a une liste complète d'outils de débogage graphique sur la page apitrace ici: apitrace.github.io/#links
Bim

11

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.


7

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.

// XXX WARNING: Untested code follows

// Blit from fbo...
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
// ...to the front buffer.
glBindFramebuffer(GL_WRITE_FRAMEBUFFER, GL_FRONT);

GLsizei HalfWindowWidth = (GLsizei)(WindowWidth / 2.0f);
GLsizei HalfWindowHeight = (GLsizei)(WindowHeight / 2.0f);

// Blit attachment 0 to the lower-left quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  0, 0, HalfWindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// Blit attachment 1 to the lower-right quadrant of the window
glReadBuffer(GL_COLOR_ATTACHMENT1);
glBlitFramebuffer(0, 0, FboWidth, FboHeight,
                  HalfWindowWidth, 0, WindowWidth, HalfWindowHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);

// ...and so on. You can switch FBOs if you have more than one to read from.

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.