Yo estoy tratando de enviar un valor booleano para OpenGL glsl shader.

Actualmente tengo esto en el shader:

uniform bool foo;

Y yo use esto para establecer que:

glUniform1i(glGetUniformLocation(shader, "foo"), true);

No parece ser un glUniform1b, así que estoy configurándolo como un entero. Esto parece funcionar bien.

Hay algún problema con este enfoque? Es portátil, o que podría estallar en otras tarjetas gráficas /drivers? Estoy usando OpenGL 4.3 en el momento.

  • Como yo sé que tiene algo que ver con la de 4 bytes alineamiento (boolean es de 1 byte en ambos sentidos de 3 bytes de relleno será añadido al final) para el uso de boolean no es eficiente y maby incluso en desuso en OpenGL
  • ciertamente no es obsoleto.
InformationsquelleAutor Jan Rüegg | 2015-11-13

1 Comentario

  1. 27

    § 4.1 Tipos Básicos
    El OpenGL Shading Language admite los siguientes tipos de datos básicos, agrupados de la siguiente manera:

    • bool un condicional del tipo, teniendo en valores de verdadero o falso
    • bvec2 una de dos componentes de vector Booleano
    • bvec3 una de tres componentes Booleano vector
    • bvec4 un componente de cuatro Booleano vector

    § 4.1.2 Booleanos A condicionar la ejecución de código más fácil de expresar, el tipo bool es compatible. No hay ninguna expectativa de que el hardware soporta directamente las variables de este tipo. (…)

    Como:

    § 2.2.1 (…) Cuando el estado se especifican los valores de uso de un parámetro distinto tipo que el tipo real de que el estado, las conversiones de datos son
    realiza de la siguiente manera:

    • Cuando el tipo de estado interno es booleano, cero enteros o de punto flotante de valores se convierten a FALSE y valores distintos de cero, se convierten en TRUE.
    • Gracias. 4.1 significa que puedo usar bool en mi glsl shader. 4.1.2 realmente no me ayuda. Lo que aún no respondida es si puedo configurar un valor booleano uniforme utilizando glUniform1i…
    • Añade una cita para que así

Dejar respuesta

Please enter your comment!
Please enter your name here