我的 OpenGL ES 片段着色器中有一个宏,如下所示:
#define CHECK(x, DELTA, outColor, c1, c2) \
if (x < (delta + (DELTA))) { \
outColor = mix(c1, c2, smoothstep(delta, min(1.0, delta + (DELTA)), x)); \
x = 10.0; /*skip all subsequent CHECKs */ \
} \
delta += DELTA;
这在我的桌面和各种 Android 设备上运行良好。(是的,我需要摆脱显式流控制,但它得到了我现在想要的输出。)问题是一些设备无法编译这个着色器,错误如下:
0:257: L0002: Undeclared variable 'DELTA'
,0:260: L0001: Expected literal or '(', got '\'
,0:263: L0001: Expected literal or '('...
(第 257 行是"if ( x"
行,第 260 行是"} \"
行,这里没有显示 263,这是CHECK
宏的第一次使用。在着色器的其他地方没有其他全大写“DELTA”的实例。)
我认为这个错误意味着他们在换行符上绊倒了?这真的是只有某些 GLSL 编译器支持的东西吗?
我正在构建我的着色器,#version 100
以便在桌面和 Android 之间尽可能兼容。