Функция с возвратным типом 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
!