Препроцессирование является одним из шагов компиляции, которая происходит до выполнения. Он просто преобразует источник, основываясь на найденных линиях #
. Он не имеет понятия о переменной, которая представляет собой концепции времени исполнения. В это время переменная не имеет значений, и препроцессор даже не знает их.
Зная, что тривиально утверждать, что вы не можете использовать значение переменной в директиве препроцессора.
Вы можете сравнить значение с помощью #define буквальной константы:
#define thre 12
#if thre > 15
float x = 1.;
#else
float x = -1.;
#endif
В GLSL, вы все еще можете использовать conditionnal структуру, но это только «правильное», если.
if(s>thre){
// do something
}else{
// do something else
}
Я думаю, что вы пытаетесь использовать препроцессор для чего-то, что должно быть сделано с помощью регулярного if(). Значение переменной s не может быть видно препроцессором, ваш код должен быть, если (s> thre) {vec4 val = texture (transfer ......)); } – BrunoLevy