简述:
有人能否确认在启用了GL_EXT_draw_instanced
的情况下,是否可以在OpenGL ES 2.0上使用内置变量gl_InstanceID
(或gl_InstanceIDEXT
)在顶点着色器中绘制多个实例,并在iOS上运行?
详述:
我想使用glDrawArraysInstanced和gl_InstanceID来绘制多个对象的实例,并希望我的应用程序能够在多个平台上运行,包括iOS。
规范明确表示这些特性需要ES 3.0。根据iOS设备兼容性参考文献,ES 3.0仅适用于少数设备(基于A7 GPU的设备;因此只适用于iPhone 5s,而不适用于iPhone 5或更早版本)。
因此,我的第一个假设是需要避免在旧的iOS设备上使用实例绘图。
然而,在兼容性参考文献中进一步说明,支持EXT_draw_instanced扩展的所有SGX系列5处理器(包括iPhone 5和4s)。
这让我想到,通过查找并使用适当的扩展函数(EXT或ARB)glDrawArraysInstanced,我也可以在旧的iOS设备上使用实例绘图。
我目前只是在Windows上使用SDL和GLEW运行一些测试代码,因此我还没有在iOS上测试任何内容。
然而,在我的当前设置中,我无法在顶点着色器中使用gl_InstanceID内置变量。我收到以下错误消息:
'gl_InstanceID' : variable is not available in current GLSL version
在GLSL中启用“draw_instanced”扩展没有任何效果:
#extension GL_ARB_draw_instanced : enable
#extension GL_EXT_draw_instanced : enable
当我明确声明需要ES 3.0 (GLSL 300 ES)时,错误消息消失了:
#version 300 es
尽管在我的Windows桌面机上在ES 2.0环境下似乎工作良好,但我怀疑这在iPhone 5上不会起作用。那么,我应该放弃在旧的iOS设备上使用实例绘图的想法吗?
gl_InstanceIDEXT
。如果苹果公司表示支持该扩展,则应该可以正常工作。 - GuyRTARB_draw_instanced
,但是当我在GLSL中使用ES 2.0时,gl_InstanceID
或gl_InstanceIDARB
都无法使用。这个问题应该不用担心吗?还是这可能表明同样的问题会影响iOS上的EXT_draw_instanced
呢? - Mårten Wikström