Wie kann ich debuggen, was in einem Frame Buffer-Objekt in OpenGL gerendert wird?

17

Ich habe eine Punktwolke, die auf dem Bildschirm gerendert wird. Jeder Punkt hat seine Position und Farbe sowie eine ID.

Ich wurde gebeten, die IDs für jeden Punkt auf eine Textur zu rendern, also erstellte ich einen FBO und fügte zwei Texturen hinzu, eine für Farbe und eine für Tiefe. Ich habe die erforderlichen VAO und VBO für dieses Off-Screen-Rendering erstellt und für jeden Punkt seine Position und ID hochgeladen.

Sobald das Rendern an den FBO abgeschlossen ist, lese ich die Pixel der Farbtextur mit, um glReadPixels()zu sehen, wie die Werte lauten, aber sie scheinen alle gelöscht zu sein, dh der Wert, den sie haben, ist der gleiche wieglClearColor() .

Gibt es eine Möglichkeit, um zu debuggen, was an der Farbtextur meines FBO gerendert wird? Alle Tipps, die Sie zur Verfügung stellen können, sind sehr willkommen.

BRabbit27
quelle

Antworten:

21

Um allgemein zu sehen, was in den verschiedenen Schritten Ihrer Pipeline gerendert wird, empfehle ich die Verwendung eines Tools für die Frame-Analyse. Diese bieten Ihnen normalerweise einen Überblick über den Inhalt jedes Puffers für jeden API-Aufruf, und dies kann Ihnen in Ihrer Situation helfen.

Ein sehr gutes ist Renderdoc das sowohl völlig kostenlos als auch ist. Auch es wird aktiv unterstützt.

Ein anderes ist Intel GPA , das laut seiner Webseite leider bis zu OGL 3.3 Core unterstützt.

Nur um noch einen hinzuzufügen, habe ich früher gDEBugger verwendet , aber es ist schon lange her, seit das letzte Update durchgeführt wurde. Dies hat sich zu AMD CodeXL entwickelt , das ich leider nie benutzt habe.

cifz
quelle
Außerdem habe ich manchmal einen Befehl, der ein bestimmtes Feld auf ein Bild ausgibt, wenn ich eine Taste drücke. Es ist der Low-Tech-Weg.
Jorge Rodriguez
Es ist wahrscheinlich auch eine gute Idee, sicherzustellen, dass Sie die richtige Tiefen-Test-Konfiguration haben, damit das Rendering in Ihren Visualisierungs-FBO einfließt.
rys
Ich benutze immer noch von Zeit zu Zeit gDEbugger für ältere GL-Versionen. CodeXL ist die modernere Version davon und kann hier gefunden werden: github.com/GPUOpen-Tools/CodeXL Beachten Sie, dass es eine umfassende Liste von Grafik-Debugging-Tools auf der Apitrace-Seite hier gibt: apitrace.github.io/#links
Bim
11

Ich habe mehrere Anwendungen / APIs / Bibliotheken getestet, um Daten von FBOs in Anwendungen abzurufen, die beispielsweise gbuffer verwenden. Nach Monaten des Leidens entdeckte ich, dass Apitrace auf Github verfügbar ist, um OpenGL, Direct3D und WebGL zu debuggen. Ich habe in Windows und Linux ohne Probleme verwendet.

Ich hoffe, das könnte nützlich für Sie sein.

esmitt
quelle
7

Zusätzlich zur Antwort von cifz besteht eine weitere Möglichkeit, FBOs zu visualisieren, die nicht viel Code kosten, darin, mit glBlitFramebuffer () Pixel von einem Framebuffer in ein Fenster zu übertragen.

// 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.

Es gibt ein paar offensichtliche "Fallstricke", bei denen HDR-Puffer wahrscheinlich nicht die Art und Weise darstellen, wie Sie es erwarten, Sie können Tiefen- / Schablonenpuffer wahrscheinlich nicht auf die offensichtliche Art und Weise "sehen", und wenn die Größe des FBO nicht stimmt Die Vergrößerungs- / Verkleinerungsmethode ist möglicherweise äußerst naiv und passt nicht zum zu überblendenden Bereich.

Aber wie schnell und schmutzig Hacks gehen, es ist ziemlich gut.

Pseudonym
quelle