Esta función le permite especificar un índice de atributo para un atributo de sombreador definido por el usuario (no para un uniforme, como sugiere el ejemplo del código), que luego utilizará al referirse al atributo.
Digamos que tiene un vertex shader:
...
attribute vec4 vertex; //or 'in vec4 vertex' in modern syntax
attribute vec3 normal;
...
A continuación, puede obligar a los índices a esas variables, con
glBindAttribLocation(program, 0, "vertex");
glBindAttribLocation(program, 1, "normal");
Usted puede usar cualquier número no negativo te gusta (en un pequeño rango) Luego, al referirse a estos atributos, usa sus índices, p. en glVertexAttribPointer
o glEnableVertexAttribArray
funciones.
Pero tenga en cuenta que debe llamarse al glBindAttribLocation
antes de vincular el programa. También puedes omitirlo. Luego, OpenGL vincula automáticamente los índices a todos los atributos utilizados durante la vinculación, que luego se puede consultar por glGetAttribLocation
. Pero con glBindAttribLocation
puede establecer su propia semántica de índice de atributos y mantenerlos consistentes.
Las versiones más recientes de GLSL incluso le permiten especificar los índices de atributos dentro del shader (utilizando la sintaxis layout
), eliminando la necesidad de que sea glBindAttribLocation
o glGetAttribLocation
, pero no estoy seguro de si esto es compatible con ES.
Pero mi respuesta no dice más que esos "varios" sitios que miraste o cualquier buen libro de OpenGL/GLSL, así que si aún no lo entiendes, ahonda un poco más en los conceptos básicos de GLSL.
¿Lo ha descubierto usted mismo y se olvidó de su pregunta o todavía tiene algunas discromías que puede querer preguntar? –