【发布时间】:2021-04-27 13:25:31
【问题描述】:
在 GLSL 中为 Vulkan 编写片段着色器时,我想我已经通过示例了解到片段的颜色可以像这样输出:
layout(location = 0) out vec4 outColor;
void main() {
outColor = /*...*/;
}
我的问题是 Vulkan 或 GLSL 规范中的哪个地方指定了这个?即位置 0 的 out 变量应该包含输出颜色,其类型可以是(必须是?)vec4?
在 Vulkan 规范中,9.9 Fragment Shaders 中似乎没有提到它,而 26 Fragment Operations 只是链接回 9.9。
GLSL 规范有两段概述 2.5 片段处理器,没有详细说明。在 7.1.5 中。 Fragment Shader Special Variables 它列出了全局变量,但没有提到“out”变量。 Layout Qualifiers 下有一些讨论,但似乎不是很具体。
有什么想法吗?
【问题讨论】:
-
这里不清楚你需要“指定”什么。例如,“位置 0 的 out 变量应该包含输出颜色”这就是在片段着色器中将
out放在全局变量声明前面的意思。比如,else 是什么意思?这里缺少哪些“细节”? -
@NicolBolas:所以在 GLSL 第 4.4.2 节中谈到片段着色器
layout(location = 3) out vec4 color将“片段颜色 3”确定为混合方程的第一个输入?肯定有某个地方指定了片段着色器输出的语义? -
@NicolBolas:还有一个索引属性:
layout(location = 3, index = 1) out vec4 factor;,它影响混合方程的输入索引。