使用未声明的标识符 '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。
大家好,我一直在尝试在 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。