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

YuA*_*uAo 1 boolean opengl-es fragment-shader ios gpuimage

我正在使用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));
}
Run Code Online (Sandbox Code Playgroud)

着色器编译日志:

ERROR: 0:1: '_Bool' : syntax error syntax error
Run Code Online (Sandbox Code Playgroud)

当我替换所有调用函数

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

YuA*_*uAo 6

我终于搞清楚了!

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

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

  • 它不仅仅是Objective-C,它是使用编译器宏的C99:http://stackoverflow.com/a/8724376/19679.我使用宏而不是字符串作为片段着色器(以避免换行并允许一些语法高亮)打开它们.可能有副作用,但您可以在着色器定义之前尝试`#undefine bool`.我会在文档中注意到这一点. (3认同)