我正在使用#if
预处理程序指令编写GLSL着色器,但我总是收到错误incorrect preprocessor directive
。
以下是我的代码(只是相关部分):
#define thre 20
float s = get_sample_data(sampling_pos);
#if s > thre
vec4 val = texture(transfer_texture, vec2(s, s));
#endif
答案 0 :(得分:2)
预处理是编译步骤之一,它发生在运行时之前。它只是根据它找到的#
行来转换源。它没有关于变量的任何线索,变量是运行时概念。此时,变量没有值,预处理器甚至都不知道它们。
知道这一点很简单,说你不能在预处理器指令中使用变量值。
您可以将#defined值与文字常量进行比较:
#define thre 12
#if thre > 15
float x = 1.;
#else
float x = -1.;
#endif
在glsl中,你仍然可以使用条件结构,但它只是常规的'如果
if(s>thre){
// do something
}else{
// do something else
}