c++ - ¿OpenGL bool uniforme?
boolean shader (1)
§ 4.1 Tipos básicos El lenguaje de sombreado de OpenGL es compatible con los siguientes tipos de datos básicos, agrupados de la siguiente manera:
bool
un tipo condicional, tomando valores de verdadero o falsobvec2
un vector booleano de dos componentesbvec3
un vector booleano de tres componentesbvec4
un vector booleano de cuatro componentes
...
§ 4.1.2 Booleanos Para que la ejecución condicional del código sea más fácil de expresar, se admite el tipo bool. No se espera que el hardware soporte directamente variables de este tipo. (...)
En cuanto a la configuración:
§ 2.2.1 (...) Cuando los valores de estado se especifican utilizando un tipo de parámetro diferente al tipo real de ese estado, las conversiones de datos se realizan de la siguiente manera:
- Cuando el tipo de estado interno es booleano, los valores de punto flotante o entero cero se convierten a
FALSE
y los valores no cero se convierten aTRUE
.
Estoy tratando de enviar un booleano a un OpenGL glsl shader.
Actualmente tengo esto en el shader:
uniform bool foo;
Y lo uso para configurarlo:
glUniform1i(glGetUniformLocation(shader, "foo"), true);
No parece haber un glUniform1b
, así que lo estoy configurando como un entero. Esto parece que funciona bien.
¿Hay algún problema con este enfoque? ¿Es portátil o podría romperse en otras tarjetas gráficas / controladores? Estoy usando OpenGL 4.3 en este momento.