使用未声明的标识符 'gl_InstanceID'

Use of undeclared identifier 'gl_InstanceID'

大家好,我一直在尝试在 IOS 平台上使用 OpenGLES2.0 进行实例化绘图。我的渲染代码

 glEnableVertexAttribArray(...);
 glVertexAttribPointer(...)
 glDrawElementsInstancedEXT(GL_TRIANGLES,IndicesCount, GL_UNSIGNED_SHORT, 0, 5);

还有我的顶点着色器

attribute vec4 VertPosition;
uniform mat4 mvpMatrix[600];

void main()
{
    gl_Position = (mvpMatrix[gl_InstanceID]) * VertPosition;
}

我遇到错误:使用了未声明的标识符 'gl_InstanceID'

我的 glsl 版本是 1.0,如果版本有问题,我该如何升级?在 GLSL 中使用 "gl_InstanceID" 的任何其他方式?

gl_InstanceID 仅从 GLSL ES 3.0 开始可用,如 here 所述。

正如您已经怀疑的那样,这是一个版本问题。据我所知,OpenGL ES 2.0 中唯一可用的 GLSL ES 版本是 GLSL ES 1.0,如果要使用更高的 GLSL ES 版本,则必须升级到 OpenGL ES 3.0。 (更多详情here

编辑:我在想你想用 gl_InstanceID 实现什么。此变量仅在使用其中一种实例化绘制命令(glDrawArraysInstanced 等)时才有意义,这些命令在 ES 2.0 中也不可用。

显然,可以通过 GL_EXT_draw_instanced 扩展在 OpenGL ES 2.0 中使用实例化渲染。此扩展为实例化绘图提供了两个额外的绘图命令(glDrawElementsInstancedEXT 和 glDrawArraysInstancedEXT)。使用扩展时,必须在着色器中启用它

#extension GL_EXT_draw_instanced : enable

并使用 gl_InstanceIDEXT 而不是 gl_InstanceID。