在iOS上使用OpenGL ES 2.0进行实例化绘图

简而言之:

任何人都可以确认是否有可能使用内置variablesgl_InstanceID (或gl_InstanceIDEXT )在顶点着色器上使用OpenGL ES 2.0在iOS上启用GL_EXT_draw_instanced


更长:

我想使用glDrawArraysInstanced和gl_InstanceID绘制一个对象的多个实例,我希望我的应用程序可以在多个平台(包括iOS)上运行。

规范明确指出,这些function需要ES 3.0。 根据iOS设备兼容性参考 ES 3.0仅在less数设备(基于A7 GPU;因此是iPhone 5s,但不在iPhone 5或更早版本)上可用。

所以我的第一个假设是我需要避免在旧的iOS设备上使用实例化的绘图。

但是,在兼容性参考文档中, 更进一步说,所有的SGX系列5处理器(包括iPhone 5和4s)都支持EXT_draw_instanced扩展。

这让我觉得我确实可以在老版本的iOS设备上使用实例化绘图,查找和使用glDrawArraysInstanced的扩展函数(EXT或ARB)。

我目前只是在Windows上运行一些使用SDL和GLEW的testing代码,所以我还没有在iOS上testing任何东西。

但是,在我目前的设置中,我无法在顶点着色器中使用gl_InstanceID内置variables。 我收到以下错误信息:

'gl_InstanceID':variables在当前的GLSL版本中不可用

在GLSL中启用“draw_instanced”扩展名不起作用:

 #extension GL_ARB_draw_instanced : enable #extension GL_EXT_draw_instanced : enable 

当我特别声明我需要ES 3.0(GLSL 300 ES)时,错误消失:

 #version 300 es 

尽pipe在ES 2.0环境下,我的Windows桌面机器似乎能正常工作,但我怀疑这是否适用于iPhone 5。

那么,我是否应该放弃在旧iOS设备上使用实例化绘图的想法?

从这里 :

核心OpenGL ES 3.0 API中提供了实例化绘图,OpenGL ES 2.0中提供了EXT_draw_instanced和EXT_instanced_arrays扩展。

你可以看到它在所有的GPU,PowerVR SGX,Apple A7,A8上均可用。

(看起来像@ Shammi不会回来…如果他们这样做,你可以改变接受的答案:)