Come posso eseguire il debug di ciò che viene visualizzato in un oggetto Frame Buffer in OpenGL?


17

Ho una nuvola di punti che viene visualizzata sullo schermo. Ogni punto ha la sua posizione e colore, nonché un ID.

Mi è stato chiesto di eseguire il rendering degli ID per ogni punto su una trama, quindi ho creato un FBO e ho allegato due trame, una per il colore e una per la profondità. Ho creato il VAO e il VBO necessari per questo rendering off-screen e caricato per ogni punto la sua posizione e ID.

Una volta terminato il rendering su FBO, leggo i pixel della trama a colori glReadPixels()per vedere quali sono i valori, ma sembrano essere tutti cancellati, cioè il valore che hanno è lo stesso di glClearColor().

Esiste un modo per eseguire il debug di ciò che viene visualizzato sulla trama dei colori del mio FBO? Tutti i suggerimenti che potresti fornire sono i benvenuti.

Risposte:


21

In generale, per vedere cosa viene reso nei vari passaggi della pipeline, suggerirei l'uso di uno strumento per l'analisi dei frame. Questi di solito ti offrono una vista sul contenuto di ciascun buffer per ogni chiamata API e questo può aiutarti nella tua situazione.

Uno molto buono è Renderdoc che è sia completamente gratuito che open source. Inoltre è attivamente supportato.

Un altro è Intel GPA che purtroppo, secondo la sua pagina Web, supporta fino a OGL 3.3 Core.

Solo per aggiungerne un altro, ero solito usare gDEBugger , ma è passato molto tempo dall'ultimo aggiornamento. Questo si è evoluto in AMD CodeXL che sfortunatamente non ho mai usato.


Inoltre a volte ho anche un comando che scaricherà un fbo specificato su un'immagine quando premo un tasto. È il modo a bassa tecnologia.
Jorge Rodriguez,

Probabilmente è anche una buona idea assicurarti di avere la giusta configurazione del test di profondità, per il rendering andando nel tuo FBO di visualizzazione.
rys,

Di tanto in tanto uso ancora gDEbugger per le versioni precedenti di GL. CodeXL è la versione più moderna e può essere trovata qui: github.com/GPUOpen-Tools/CodeXL Nota che c'è un elenco completo di strumenti per il debug della grafica nella pagina apitrace qui: apitrace.github.io/#links
Bim

11

Ho testato diverse applicazioni / API / librerie per ottenere dati dagli FBO in applicazioni che usano ad esempio gbuffer. Dopo mesi di sofferenza ho scoperto apitrace disponibile su Github per il debug di OpenGL, Direct3D e WebGL. Ho usato in Windows e Linux senza problemi.

Spero possa esserti utile.


7

Oltre alla risposta cifz, un altro modo per visualizzare gli FBO che non costano molto codice è usare glBlitFramebuffer () per trasferire pixel da un framebuffer a una finestra.

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

Ci sono alcuni "gotchas" evidenti, in quanto i buffer HDR probabilmente non visualizzeranno come previsto, probabilmente non è possibile "vedere" i buffer di profondità / stencil in modo ovvio e se le dimensioni dell'FBO non lo fanno non corrispondere all'area in cui si è benedetti, il metodo di ingrandimento / minificazione potrebbe essere estremamente ingenuo.

Ma per quanto riguarda gli hack veloci e sporchi, è abbastanza buono.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.