概念:glDrawBuffer和glDrawBuffers有啥用?
Posted
技术标签:
【中文标题】概念:glDrawBuffer和glDrawBuffers有啥用?【英文标题】: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 = ...)
。
【参考方案1】:
并非所有附加到帧缓冲区的颜色附件都必须由着色器程序渲染。 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;
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 没有写入数据。
【讨论】:
以上是关于概念:glDrawBuffer和glDrawBuffers有啥用?的主要内容,如果未能解决你的问题,请参考以下文章