【发布时间】:2019-10-03 18:18:45
【问题描述】:
自 GLSL 4.20 起,const 限定变量不再需要由常量表达式初始化。但是当我真正尝试定义一个由非常量表达式初始化的全局const-qualified 变量时,Mesa 会发出错误。下面是示例代码:
#version 420
uniform vec2 v;
const float x=v.x;
out vec4 color;
void main()
{
color=vec4(x,v.y,0,1);
}
这是我测试编译的方式(以避免任何 OpenGL 代码):
$ glsl_compiler --version 420 test.frag
Info log for test.frag:
0:3(15): error: initializer of const variable `x' must be a constant expression
如果我将const float x=v.x; 行移到main 函数体中,编译成功结束。
OTOH,nvidia 驱动程序(像往常一样)更加宽容,接受原始代码而不发出警告。
那么,GLSL 4.20+ 是否实际上在全局范围内禁止 const 限定变量的非常量表达式初始化程序,或者这个错误是 Mesa 错误?
【问题讨论】:
标签: global-variables glsl constants