2013-07-17 15 views
8

Non ho trovato nulla da nessuna parte nella documentazione OpenGL. Scusa se è già stata data una risposta. Ma la mia domanda è se sto copiando pixel da un FBO a un altro e ognuno di essi ha più (non necessario lo stesso numero) di allegati colorati, e se la mia maschera è GL_COLOR_BUFFER_BIT, quali allegati di colore (GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, .... GL_COLOR_ATTACHMENTN) copia? Tutti loro? Se sì, cosa succede se questi FBO hanno un numero diverso di buffer di colore collegati a loro?GlBlitFramebuffer copia tutti gli allegati di colore se viene specificata la maschera GL_COLOR_BUFFER_BIT

Si supponga che ci sono 2 FBO che sono legati in questo modo:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo1); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo2); 

Nota che fbo1 ha 2 allegati a colori e fbo2 ha 4 allegati colore.

Quindi, in che modo il glBlitFrameBuffer blit i colori in questo caso?

risposta

13

Un framebuffer color blitting operation volontà solo lettura dal current glReadBuffer per il GL_READ_FRAMEBUFFER, e sarà solo scrittura per the glDrawBuffers specificato per il GL_DRAW_FRAMEBUFFER. Quindi non si tratta degli allegati; si tratta di leggere e disegnare buffer dei due framebuffer.

+1

Grazie Nicol. Ne ero consapevole. La mia domanda è ancora valida. Per il gusto di fare domanda più chiaro, ecco le 2 OSA che sono legati in questo modo: \t ** glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); ** ** \t glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); ** fbo1 ha 2 allegati a colori e fbo2 ha 4 allegati a colori. Quindi, in che modo glBlitFrameBuffer copia gli allegati dei colori in questo caso? – viktorzeid

+4

@kvikram: "* Ne ero consapevole. *" No, non lo eri e non lo sei ancora. Quello che non riesci a cogliere è la differenza tra "l'attuale glReadBuffer" e "il * framebuffer * associato a GL_READ_FRAMEBUFFER". Come ho detto, non si tratta degli * allegati *; si tratta di leggere e disegnare buffer * all'interno * dei framebuffer. –

+3

Grazie Nicol. Penso che tu abbia chiarito la mia comprensione. Il primo passo è scegliere gli FBO per leggere/disegnare: \t glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); \t glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); e quindi menzionare esplicitamente i buffer colore per lettura/disegno glReadBuffer (GL_COLOR_ATTACHMENT0); glDrawBuffer (GL_COLOR_ATTACHMENT3); e quindi eseguire l'operazione blit: \t glBlitFramebuffer ..? Questo copierà il buffer nell'allegato colore 0 da fbo1 al buffer nel colore attachment3 in fbo2? – viktorzeid