ios - Uso del identificador no declarado ''gl_InstanceID''
opengl-es glsl (1)
Hola a todos, he estado probando el dibujo instanciado en OpenGLES2.0, en la plataforma IOS. Mi código de representación
glEnableVertexAttribArray(...);
glVertexAttribPointer(...)
glDrawElementsInstancedEXT(GL_TRIANGLES,IndicesCount, GL_UNSIGNED_SHORT, 0, 5);
Y mi Vertex Shader
attribute vec4 VertPosition;
uniform mat4 mvpMatrix[600];
void main()
{
gl_Position = (mvpMatrix[gl_InstanceID]) * VertPosition;
}
Recibo ERROR: Uso del identificador no declarado ''gl_InstanceID''
mi versión de GLSL es 1.0, si la versión es el problema, ¿cómo puedo actualizar? ¿Alguna otra forma de usar "gl_InstanceID" en GLSL?
gl_InstanceID solo está disponible a partir de GLSL ES 3.0 como se indica aquí .
Así que esto es, como ya sospechabas, un problema de versión. Por lo que yo sé, la única versión disponible de GLSL ES en OpenGL ES 2.0 es GLSL ES 1.0, y si desea utilizar una versión más alta de GLSL ES, debe actualizar a OpenGL ES 3.0. (más detalles aquí )
Editar: estaba pensando en lo que quiere lograr con el uso de gl_InstanceID. Esta variable solo tiene sentido cuando se utiliza uno de los comandos de sorteo instalados (glDrawArraysInstanced, etc.), que tampoco están disponibles en ES 2.0.
Aparentemente, existe la posibilidad de usar la representación de instancias en OpenGL ES 2.0 utilizando la extensión GL_EXT_draw_instanced . Esta extensión proporciona uno con dos comandos de dibujo adicionales para dibujo instanciado (glDrawElementsInstancedEXT y glDrawArraysInstancedEXT). Al usar la extensión, uno debe habilitarla en el sombreador
#extension GL_EXT_draw_instanced : enable
y use gl_InstanceIDEXT en lugar de gl_InstanceID.