GL_COLOR_ATTACHMENT 有啥作用?

Posted

技术标签:

【中文标题】GL_COLOR_ATTACHMENT 有啥作用?【英文标题】:What does GL_COLOR_ATTACHMENT do?GL_COLOR_ATTACHMENT 有什么作用? 【发布时间】:2016-01-24 05:53:52 【问题描述】:

我现在正在学习帧缓冲区,但我只是不明白颜色附件的作用。我了解帧缓冲区。

中的第二个参数有什么意义:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);

当我将帧缓冲区更改为 COLOR_ATTACHMENT1 时,为什么没有任何内容绘制到我的帧缓冲区?

如何通过将纹理设置为颜色附件 1 来绘制帧缓冲区? 为什么使用多种颜色的附件会有用? 是不是类似于glActiveTexture(GL_TEXTUREi)一次绘制多个纹理的概念?

我只是想了解更开放的 gl。谢谢。

【问题讨论】:

【参考方案1】:

是的,帧缓冲区可以有多个颜色附件,glFramebufferTexture2D() 的第二个参数控制您要设置的附件。可通过以下方式查询支持的颜色附件的最大数量:

GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);

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

要选择要渲染到的缓冲区,请使用glDrawBuffer()glDrawBuffers()。这两个调用的唯一区别是第一个允许你只指定一个缓冲区,而第二个支持多个缓冲区。

在您尝试的示例中,您可以使用以下任一方式渲染到GL_COLOR_ATTACHMENT1

glDrawBuffer(GL_COLOR_ATTACHMENT1);

或:

GLenum bufs[1] = GL_COLOR_ATTACHMENT1;
glDrawBuffers(1, bufs);

默认值为GL_COLOR_ATTACHMENT0,这解释了为什么您在未使用此调用的情况下成功渲染到附件 0。绘制缓冲区列表是 FBO 状态的一部分。

要为多个颜色缓冲区生成输出,您可以在片段着色器中定义多个输出。

多颜色缓冲区(通常称为首字母缩写词 MRT = 多个渲染目标)的一种流行用途是延迟着色,其中用于着色计算的插值顶点属性存储在初始渲染过程中的多个缓冲区中。然后,使用第一遍中生成的缓冲区的属性值,仅对第二遍中的可见像素执行实际的着色计算。例如,请参阅 http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html 以获得有关其工作原理的更完整说明。

【讨论】:

以上是关于GL_COLOR_ATTACHMENT 有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

sigmoid是啥有啥作用,或者有啥功能!

Amazon ELB 自动运行状况检查有啥作用,它有啥期望?

SynchronizationContext 有啥作用?

BluetoothGatt.setCharacteristicNotification() 有啥作用?

“@”有啥作用?

分号有啥作用?