使用GPUImage在OpenGL ES着色器中使用bool返回类型的函数

时间:2014-01-18 16:31:15

标签: ios opengl-es boolean gpuimage fragment-shader

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

1 个答案:

答案 0 :(得分:5)

我终于搞清楚了!

GPUImage使用SHADER_STRING()来解析着色器。

当我写bool时,LLVM Objective-C编译器不知道这些代码将被转换为着色器字符串。当编译器看到bool时,它会将bool替换为_Bool,因为在Objective-C中bool被定义为_Bool