概念:glDrawBuffer和glDrawBuffers的用途是什么?

时间:2018-06-25 18:51:56

标签: opengl glsl

当我遇到这两种方法时,我正在阅读红皮书OpenGL编程指南,这对我来说是不必要的,因为我们已经可以使用layout (location = )或{{1 }}。我在这里误会什么吗?

1 个答案:

答案 0 :(得分:6)

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

例如假设您有一个带有三个颜色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没有写入数据。