如果我要将像素从一个FBO复制到另一个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);
请注意,fbo1
有2个彩色附件,fbo2
有4个彩色附件。
那么在这种情况下,glBlitFrameBuffer
Blit彩色附件是如何实现的呢?
我在OpenGL文档中找不到这一点。
2条答案
按热度按时间lrpiutwd1#
帧缓冲区颜色漂移操作将仅从
GL_READ_FRAMEBUFFER
的当前glReadBuffer
读取,并且仅写入为GL_DRAW_FRAMEBUFFER
指定的glDrawBuffers
。因此,这与附件无关;它与两个帧缓冲区的读取和绘制缓冲区有关。omqzjyyz2#
这是一个老主题,但我最近遇到了同样的问题。之前接受的答案仍然有效,但您必须在blit操作之后恢复读/写缓冲区,因为这是帧缓冲区状态的一部分。
对于那些使用OpenGL 4.5版和更高版本的用户,您可以利用新的Direct State Access功能,而不是使用
glBlitNamedFramebuffer
,这将为我们提供一个更干净的解决方案。有了NamedFramebuffer
,我们就可以访问和修改读/写缓冲区,而不必绑定帧缓冲区,因此不会更改任何状态。虽然我还没有测试性能,但差别应该很小(希望如此)。