【问题标题】:Concept: what is the use of glDrawBuffer and glDrawBuffers?概念:glDrawBuffer和glDrawBuffers有什么用?
【发布时间】:2018-06-25 18:51:55
【问题描述】:

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

【问题讨论】:

  • IIRC,除非你调用glDrawBuffers,否则你只能渲染到第0个帧缓冲附件,不管layout (location = ...)

标签: opengl glsl shader fragment-shader framebuffer


【解决方案1】:

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

例如假设您有一个带有 3 种颜色附件的帧缓冲区 GL_COLOR_ATTACHMENT0GL_COLOR_ATTACHMENT1GL_COLOR_ATTACHMENT2

片段着色器

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

drawbuffer 规范:

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 没有写入数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2013-03-18
    • 2014-04-03
    • 2011-03-28
    • 2016-04-24
    相关资源
    最近更新 更多