我正在使用GPUImage框架开发iOS项目。我不能让我的着色器得到遵守。
我的片段着色器中有一个函数:
const vec2 boundMin = vec2(0.0, 0.0);
const vec2 boundMax = vec2(1.0, 1.0);
bool inBounds (vec2 p) {
return all(lessThan(boundMin, p)) && all(lessThan(p, boundMax));
}
着色器编译日志:
ERROR: 0:1: '_Bool' : syntax error syntax error
当我替换所有对函数
的调用时 inBounds(vec2 p)
与
all(lessThan(boundMin, p)) && all(lessThan(p, boundMax))
它有效很棒!
问题:
OpenGL ES 2.0 Fragment Shader支持bool功能吗?如果是的话,我哪里出错了?如果没有,为什么有all()
,lessThan()
等功能
环境:iPad mini,iOS 7,OpenGL ES 2.0,Xcode 5.0.2
答案 0 :(得分:5)
我终于搞清楚了!
GPUImage使用SHADER_STRING()来解析着色器。
当我写bool
时,LLVM Objective-C编译器不知道这些代码将被转换为着色器字符串。当编译器看到bool
时,它会将bool
替换为_Bool
,因为在Objective-C中bool
被定义为_Bool
!