Поскольку GLSL 4.20 const
-квалифицированные переменные больше не должны инициализироваться константными выражениями. Но когда я на самом деле пытаюсь определить глобальную const
-качественную переменную, инициализированную неконстантным выражением, 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
body, компиляция завершается успешно.
OTOH, драйвер nvidia, будучи (как обычно) гораздо более разрешающим, принимает исходный код без предупреждений.
Итак, GLSL 4.20+ фактически запрещает непостоянный- выражение инициализаторов const
- квалифицированных переменных в глобальной области видимости, или эта ошибка является ошибкой Mesa?