概念:glDrawBuffer和glDrawBuffers有什么用?
Concept: what is the use of glDrawBuffer and glDrawBuffers?
当我遇到这两种方法时,我正在阅读红皮书 OpenGL 编程指南,这让我觉得没有必要,因为我们已经可以使用 layout (location = )
或 [ 指定输出将转到哪个颜色缓冲区=11=]。我是不是误解了什么?
并非所有附加到帧缓冲区的颜色附件都必须由着色器程序渲染。 glDrawBuffers
指定要绘制到的颜色缓冲区列表。
例如假设您有一个带有 3 种颜色附件 GL_COLOR_ATTACHMENT0
、GL_COLOR_ATTACHMENT1
和 GL_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 没有写入数据。
当我遇到这两种方法时,我正在阅读红皮书 OpenGL 编程指南,这让我觉得没有必要,因为我们已经可以使用 layout (location = )
或 [ 指定输出将转到哪个颜色缓冲区=11=]。我是不是误解了什么?
并非所有附加到帧缓冲区的颜色附件都必须由着色器程序渲染。 glDrawBuffers
指定要绘制到的颜色缓冲区列表。
例如假设您有一个带有 3 种颜色附件 GL_COLOR_ATTACHMENT0
、GL_COLOR_ATTACHMENT1
和 GL_COLOR_ATTACHMENT2
:
片段着色器
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 没有写入数据。