Функция с возвратным типом bool в шейдере OpenGL ES с использованием GPUImage

Я работаю над проектом 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(vec2 p)

с

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

он работает отлично!


Вопросы:

Поддерживается ли функция bool в OpenGL ES 2.0 Fragment Shader? Если да, то где я ошибся? Если нет, то почему существуют такие функции, как all(), lessThan() и т.д.

Окружающая среда: iPad mini, iOS 7, OpenGL ES 2.0, Xcode 5.0.2

Ответ 1

Я наконец понял это!

GPUImage использует SHADER_STRING() для разбора шейдеров.

Когда я пишу bool, компилятор LLVM Objective-C не знал, что этот код кода будет преобразован в шейдерную строку. Когда компилятор увидит bool, он заменит bool на _Bool, потому что в Objective-C bool определено _Bool!