大家好,我一直在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 开始可用,如上所述.
所以,正如您已经怀疑的那样,这是一个版本问题。据我所知,OpenGL ES 2.0 中唯一可用的 GLSL ES 版本是 GLSL ES 1.0,如果您想使用更高的 GLSL ES 版本,则必须升级到 OpenGL ES 3.0。 (更多细节here https://stackoverflow.com/questions/8872105/what-versions-of-glsl-can-i-use-in-opengl-es-2-0)
编辑:我在想你想通过使用 gl_InstanceID 来实现什么。该变量仅在使用实例化绘制命令(glDrawArraysInstanced 等)之一时才有意义,而这些命令在 ES 2.0 中也不可用。
显然,可以通过使用 OpenGL ES 2.0 中的实例渲染GL_EXT_draw_instanced http://www.khronos.org/registry/gles/extensions/EXT/draw_instanced.txt扩大。此扩展为实例化绘图提供了两个附加绘图命令(glDrawElementsInstancedEXT 和 glDrawArraysInstancedEXT)。使用扩展时,必须在着色器中启用它
#extension GL_EXT_draw_instanced : enable
并使用 gl_InstanceIDEXT 而不是 gl_InstanceID。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)