Los documentos de OpenGL 4 dicen:

GL_CURRENT_VERTEX_ATTRIB

params devuelve cuatro valores que representan el valor actual del atributo de vértice genérico especificado por index. El atributo genérico de vértice 0 es único en el sentido de que no tiene un estado actual, por lo que se generará un error si el índice es 0. El valor inicial para todos los demás atributos de vértice genérico es (0,0,0,1).

¿Qué significa en la práctica que "se generará un error si el índice es 0"?

Supongamos que tengo un sombreador de vértices con el siguiente diseño:

layout (location = 0) in vec3 pos;

Quiero establecer un atributo de vértice genérico (constante). ¿Puedo usar glVertexAttrib3f con un índice igual a 0?

glVertexAttrib3f(0, 1, 0, 0);

Más tarde me gustaría verificar el atributo de vértice actual de esta manera:

glGetVertexAttribfv(0, GL_CURRENT_VERTEX_ATTRIB, data);

Es correcto ?

2
Irbis 1 sep. 2020 a las 16:32

1 respuesta

La mejor respuesta

El texto de la documentación es incorrecto, en relación con el núcleo de OpenGL 3.2 o superior. En el perfil principal de OpenGL, el atributo 0 tiene estado y ese estado se puede consultar.

En el perfil de compatibilidad hasta 4.5 (y todas las versiones GL anteriores a 3.0), el atributo 0 no tiene estado. 4.5 cambió el perfil de compatibilidad para dar el estado del atributo 0. De hecho, la especificación menciona específicamente este cambio:

Este es un cambio en el comportamiento del perfil de compatibilidad [sic] para una mayor interoperabilidad con el perfil del núcleo y OpenGL ES.

Habiendo dicho todo eso, debería fingir que los valores de los atributos genéricos no existen. Dado que se utilizan con poca frecuencia, se desconocen sus características de rendimiento. Y los valores de ellos son algo efímeros; Si establece un valor, renderiza algo y luego renderiza algo que usa una matriz para ese atributo, el valor que estableció previamente no se conservará, por lo que deberá volver a establecerlo. Esto es bastante diferente a la mayoría de los estados de OpenGL.

5
Nicol Bolas 1 sep. 2020 a las 15:01