首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GL_COLOR_ATTACHMENT是做什么的?

GL_COLOR_ATTACHMENT是做什么的?
EN

Stack Overflow用户
提问于 2016-01-24 05:53:52
回答 1查看 10.6K关注 0票数 8

我现在正在学习框架缓冲区,我只是不明白颜色附件是干什么的。我理解框架缓冲。

第二个参数的意义是什么:

代码语言:javascript
运行
复制
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);

当我将帧缓冲区更改为COLOR_ATTACHMENT1时,为什么没有任何东西吸引到它?

如何通过将纹理设置为“颜色附件1”来绘制到框架缓冲区?为什么使用多色附件是有用的?它是否类似于glActiveTexture(GL_TEXTUREi)一次绘制多个纹理的概念?

我只是想了解更开放的通用语言。谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2016-01-24 07:33:57

是的,一个框架缓冲区可以有多个颜色附件,glFramebufferTexture2D()的第二个参数可以控制您设置的是哪个颜色附件。支持的颜色附件的最大数量可以使用以下方法查询:

代码语言:javascript
运行
复制
GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);

所有实现所支持的最小数目为8。

若要选择要呈现给哪个缓冲区,请使用glDrawBuffer()glDrawBuffers()。这两个调用之间唯一的区别是,第一个调用只允许指定一个缓冲区,而第二个则支持多个缓冲区。

在您尝试的示例中,可以使用以下任何一种方法将其呈现为GL_COLOR_ATTACHMENT1

代码语言:javascript
运行
复制
glDrawBuffer(GL_COLOR_ATTACHMENT1);

或者:

代码语言:javascript
运行
复制
GLenum bufs[1] = {GL_COLOR_ATTACHMENT1};
glDrawBuffers(1, bufs);

默认情况是GL_COLOR_ATTACHMENT0,这解释了为什么在不使用此调用的情况下成功地将附件0呈现为附件0。绘制缓冲区列表是FBO状态的一部分。

若要为多色缓冲区生成输出,请在片段着色器中定义多个输出。

一种常用的多色缓冲器(通常被缩写为MRT =多个渲染目标)是延迟着色,其中用于阴影计算的插值顶点属性存储在初始呈现传递中的多个缓冲区中。然后,使用第一次传递中产生的缓冲区的属性值,只对第二次传递中的可见像素执行实际的阴影计算。例如,有关如何工作的更完整的说明,请参见http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html

票数 19
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34972716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档