Начиная с п. 4.3.5 из Язык затенения OpenGL® ES версия 1.0.17 (PDF) :
Можно использовать изменяющий квалификатортолько с типами данных float, vec2, vec3, vec4, mat2, mat3 и mat4 или их массивами.
И из §4.3.3:
Спецификатор атрибута может использоваться только с типами данных float, vec2, vec3, vec4, mat2, mat3 и mat4.Переменные атрибута не могут быть объявлены как массивы или структуры.
Таким образом, вы не можете иметь attribute bool
, не говоря уже о varying bool
, в соответствии со спецификацией.
Если выдействительно нужно логическое значение для каждой вершины, вы можете использовать 0,0 для ложного и 1,0 для истинного.При тестировании проверьте на x > 0.5
.Например:
// vertex shader
attribute float a_my_bool;
varying float v_my_bool;
void main() {
// ...
v_my_bool = a_my_bool;
}
// fragment shader
varying float v_my_bool;
void main() {
if (v_my_bool > 0.5) {
// my_bool is true
// ...
} else {
// my_bool is false
// ...
}
}
Пока все вершины в каждом треугольнике имеют одинаковое значение, это должно работать.Если они не согласованы, то вы получите разные фрагменты для одного и того же треугольника, которые ведут себя по-разному.(Если вы придерживаетесь 0,0 и 1,0, четверть треугольника, ближайшего к «нечетному» углу, будет вести себя иначе, чем остальные.)