如果指定了GL_COLOR_BUFFER_BIT掩码,glBlitFramebuffer是否会复制所有颜色附件?

vik*_*eid 15 opengl graphics framebuffer blit

如果我复制从一个FBO像素到另一个和他们每个人都有颜色附件的多个(不必是相同的号码),如果我的面具是GL_COLOR_BUFFER_BIT,哪种颜色的附件(GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1,..., GL_COLOR_ATTACHMENTi)它复制?他们都是?如果是,如果这些FBO附加了不同数量的颜色缓冲区怎么办?

假设有2个FBO以这种方式绑定:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo1); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo2); 
Run Code Online (Sandbox Code Playgroud)

请注意,它fbo1有2个颜色附件,并fbo2有4个颜色附件.

那么glBlitFrameBuffer在这种情况下如何将blit颜色附件?

我无法在OpenGL文档中的任何地方找到它.

Nic*_*las 17

帧缓冲颜色Blitting操作从读取当前glReadBufferGL_READ_FRAMEBUFFER,它会glDrawBuffers指定的GL_DRAW_FRAMEBUFFER.所以这不是附件; 它是关于两个帧缓冲区的读取和绘制缓冲区.

  • 谢谢尼科尔.我想你清除了我的理解.第一步是选择FBO进行读/绘:glBindFramebuffer(GL_READ_FRAMEBUFFER,fbo1); glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo2); 然后明确提到读取/绘制glReadBuffer(GL_COLOR_ATTACHMENT0)的颜色缓冲区; glDrawBuffer(GL_COLOR_ATTACHMENT3); 然后执行blit操作:glBlitFramebuffer ..?这会将颜色附件0中的缓冲区从fbo1复制到fbo2中颜色attachment3中的缓冲区吗? (8认同)
  • @kvikram完全可以随意[接受](http://meta.stackexchange.com/q/5234/162011)这个答案.顺便说一句,如果你有多个绘制缓冲区,读缓冲区将被复制到所有这些缓冲区中.实际上,您甚至可以使用相同的帧缓冲区进行读取和绘制,并以这种方式将一个附件复制到另一个附件中. (7认同)
  • @kvikram:"*我知道这一点.*"不,你没有,你仍然没有.您未能掌握的是"当前glReadBuffer"与"绑定到GL_READ_FRAMEBUFFER的*framebuffer*"之间的区别.正如我所说,这不是关于*附件*; 它是关于*帧缓冲区内的读取和绘制缓冲区*. (5认同)
  • 谢谢尼科尔。我意识到这一点。我的问题仍然成立。为了使问题更清楚,以下是按这种方式绑定的2个FBO:** glBindFramebuffer(GL_READ_FRAMEBUFFER,fbo1); ** ** glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo2); ** fbo1具有2个颜色附件和fbo2有4个颜色附件。那么在这种情况下,glBlitFrameBuffer如何复制颜色附件? (4认同)