#if
, #else
и #endif
- операторы препроцессора. Но int x = 5;
является локальной переменной. Препроцессор обрабатывает исходную строку, она является частью процесса объединения, но это делается до фактической компиляции. Переменная x
не имеет значения для препроцессора.
A x
для препроцессора можно определить следующим образом:
#define x 5
#if(x == 5)
gl_FragColor = vec4(1.0);
#else
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
#endif
Но оператор glsl if
начинается с ключевого слова if
, за которым следует выражение bool и выражение. Необязательно, за ним следует ключевое слово else
и еще одно утверждение:
int x = 5;
if (x == 5)
{
gl_FragColor = vec4(1.0);
}
else
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
В этом случае фигурные скобки можно пропустить, потому что в каждом случае есть только одно утверждение.
Обратите внимание, также может использоваться троичный оператор:
gl_FragColor = x==5 ? vec4(1.0) : vec4(1.0, 0.0, 0.0, 1.0);
Все это можно подробно прочитать в спецификации OpenGL Shading Language 1.50 . Препроцессор описан в главе «3.3. Препроцессор», оператор if
указан в главе «6.2 Выбор», а троичный оператор - в главе «5.8 Назначения»
.