最佳答案
我看到了很多不同的碎片着色器,
#version 130
out vec4 flatColor;
void main(void)
{
flatColor = vec4(0.0,1.0,0.0,0.5);
}
它们都使用不同的变量来表示“ out color”(在本例中为 flatColor
)。那么 OpenGL 是如何知道您想要做什么的呢?
我猜这是因为 flatColor
是唯一定义为 out
的变量,但是你可以添加更多的 out
变量,不是吗?还是会直接崩溃?
实际上,作为测试,我刚刚运行了这个:
#version 330
in vec2 TexCoord0;
uniform sampler2D TexSampler;
out vec4 x;
out vec4 y;
void main()
{
y = texture2D(TexSampler, TexCoord0.xy);
}
无论我使用 x
还是 y
,它都工作得很好。
(答案: 编译器正在优化未使用的 var,所以剩下的 var 被分配到位置0)
此外,我们有一个预定义的 gl_FragColor
。有什么区别,为什么人们通常坚持使用自己的变量?