在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不会回来…如果他们这样做,你可以改变接受的答案:)