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

Ios 使用GPUImage在OpenGL ES着色器中使用bool返回类型的函数,ios,opengl-es,boolean,gpuimage,fragment-shader,Ios,Opengl Es,Boolean,Gpuimage,Fragment Shader,我正在做一个iOS项目,使用GPUImage框架。我无法得到我的许可 我的片段着色器中有一个函数: 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:

我正在做一个iOS项目,使用GPUImage框架。我无法得到我的许可


我的片段着色器中有一个函数:

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(vec2p)

all(lessThan(boundMin,p))和&all(lessThan(p,boundMax))

它工作得很好


问题:

OpenGL ES 2.0片段着色器是否支持布尔函数?如果是这样,我错在哪里了?如果没有,为什么会有像
all()
lessThan()等函数


环境:iPad mini、iOS 7、OpenGL ES 2.0、Xcode 5.0.2,我终于明白了

GPUImage使用SHADER_STRING()解析着色器


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

我终于明白了

GPUImage使用SHADER_STRING()解析着色器


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

可以显示整个着色器吗?如果我正确阅读编译日志,它会抱怨第一行。@AndonM.Coleman我不认为这是第一行,因为当我删除
inBounds
函数时,它工作正常。我相信是函数本身造成了问题。你使用GPUImage吗?我不认为GPUImage的着色器编译日志可以给出错误的确切位置。0:1通常意味着第1行第一个字符的效果。每个供应商都不同,但这往往是惯例。@AndonM.Coleman我的第一行是
precision highp float
..@AndonM.Coleman iOS支持
highp
,我知道,我在其他片段着色器中使用
highp
,这很好。你能显示整个着色器吗?如果我正确阅读编译日志,它会抱怨第一行。@AndonM.Coleman我不认为这是第一行,因为当我删除
inBounds
函数时,它工作正常。我相信是函数本身造成了问题。你使用GPUImage吗?我不认为GPUImage的着色器编译日志可以给出错误的确切位置。0:1通常意味着第1行第一个字符的效果。每个供应商都不同,但这往往是惯例。@AndonM.Coleman我的第一行是
precision highp float
..@AndonM.Coleman iOS确实支持
highp
,我知道,我在其他片段着色器中使用
highp
,这很好。不仅仅是Objective-C,C99使用编译器宏来实现这一点:。对于片段着色器,我使用宏而不是字符串(以避免换行并允许一些语法高亮显示),这使它们更容易做到这一点。可能会有副作用,但您可以在着色器定义之前尝试
#取消定义bool
。我会在文档中注意到这一点。不仅仅是Objective-C,C99使用编译器宏来实现这一点:。对于片段着色器,我使用宏而不是字符串(以避免换行并允许一些语法高亮显示),这使它们更容易做到这一点。可能会有副作用,但您可以在着色器定义之前尝试
#取消定义bool
。我会在文档中记录这一点。