概念:glDrawBuffer和glDrawBuffers有什么用?

Concept: what is the use of glDrawBuffer and glDrawBuffers?

当我遇到这两种方法时,我正在阅读红皮书 OpenGL 编程指南,这让我觉得没有必要,因为我们已经可以使用 layout (location = ) 或 [ 指定输出将转到哪个颜色缓冲区=11=]。我是不是误解了什么?

并非所有附加到帧缓冲区的颜色附件都必须由着色器程序渲染。 glDrawBuffers 指定要绘制到的颜色缓冲区列表。

例如假设您有一个带有 3 种颜色附件 GL_COLOR_ATTACHMENT0GL_COLOR_ATTACHMENT1GL_COLOR_ATTACHMENT2:

的 frambuffer

片段着色器

layout (location = 0) out vec4 out_color1;
layout (location = 1) out vec4 out_color2;

drawbufferr 规格:

const GLenum buffers[]{ GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT0 };
glDrawBuffers( 2, buffers );

out_color1 将其数据发送到索引 0 处的绘图缓冲区(因为 location = 0 声明)。上面对 glDrawBuffers 的调用将此缓冲区设置为 GL_COLOR_ATTACHMENT2。同样,out_color2 将其数据发送到索引 1,该索引设置为 GL_COLOR_ATTACHMENT0。附件 1 没有写入数据。