c++ opengl boolean shader

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 falso
  • bvec2 un vector booleano de dos componentes
  • bvec3 un vector booleano de tres componentes
  • bvec4 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 a TRUE .

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.