IF运算符的预处理程序指令错误不正确

时间:2015-07-17 16:36:17

标签: opengl glsl

我正在使用#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

1 个答案:

答案 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
}