2013-07-17 23 views
8

Ich konnte dies nirgendwo in der OpenGL-Dokumentation finden. Es tut uns leid, wenn es zuvor beantwortet wurde. Aber meine Frage ist, wenn ich Pixel von einem FBO zu einem anderen kopiere und jeder von ihnen mehrere (nicht die gleiche Anzahl) von Farbanhängen hat, und wenn meine Maske GL_COLOR_BUFFER_BIT ist, welche Farbanhänge (GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, .... GL_COLOR_ATTACHMENTN) Kopiert es? Alle von ihnen? Wenn ja, was ist, wenn diese FBOs eine unterschiedliche Anzahl von Farbpuffern haben?Kopiert glBlitFramebuffer alle Farbanhänge, wenn die GL_COLOR_BUFFER_BIT-Maske angegeben wurde

Angenommen, dass es 2 FBOs, die auf diese Weise gebunden sind:

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

anzumerken, dass fbo1 hat 2 Farb Attachments und fbo2 hat Farbe 4-Anhänge.

Wie also blob in diesem Fall die glBlitFrameBuffer blot-Anhänge?

Antwort

13

A framebuffer color blitting operation wird nur Lesen aus dem current glReadBuffer für die GL_READ_FRAMEBUFFER, und es wird nur Schreiben auf the glDrawBuffers für die GL_DRAW_FRAMEBUFFER angegeben. Es geht also nicht um die Eigensinne; es geht um die Lese- und Zeichenpuffer der beiden Framebuffer.

+1

Danke Nicol. Ich war mir dessen bewusst. Meine Frage gilt immer noch. Aus Gründen der Herstellung klarer Frage, hier sind die 2 FBOs, die auf diese Weise gebunden sind: \t ** glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); ** \t ** glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); ** fbo1 hat 2 Farbanhänge und fbo2 hat 4 Farbanhänge. Wie also kopiert der glBlitFrameBuffer in diesem Fall farbige Anhänge? – viktorzeid

+4

@kvikram: "* Ich war mir dessen bewusst. *" Nein, warst du nicht und bist es immer noch nicht. Was Sie nicht verstehen, ist der Unterschied zwischen "dem aktuellen glReadBuffer" und "dem * Framebuffer *, der an GL_READ_FRAMEBUFFER gebunden ist". Wie gesagt, es geht nicht um die * Anhänge *; es geht um die Lese- und Zeichenpuffer * innerhalb der Framebuffer. –

+3

Danke Nicol. Ich denke, du hast mein Verständnis geklärt. Der erste Schritt besteht darin, die FBOs für Lesen/Zeichnen auszuwählen: \t glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); \t glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); und dann explizit die Farbpuffer für Lesen/Zeichnen angeben glReadBuffer (GL_COLOR_ATTACHMENT0); glDrawBuffer (GL_COLOR_ATTACHMENT3); und dann die Blit-Operation: \t glBlitFramebuffer ..? Dies wird Puffer in Farbe Anlage 0 von fbo1 Puffer in Farbe Anlage 3 in fbo2? – viktorzeid