简而言之:
任何人都可以确认是否可以在启用了gl_InstanceID
的iOS上使用OpenGL ES 2.0的顶点着色器中使用内置变量gl_InstanceIDEXT
(或GL_EXT_draw_instanced
)?
长:
我想使用glDrawArraysInstanced和gl_InstanceID绘制对象的多个实例,我希望我的应用程序可以在多个平台上运行,包括iOS。
规范明确指出这些功能需要ES 3.0。根据{{3}} ES 3.0仅适用于少数设备(基于A7 GPU;因此适用于iPhone 5s,但不适用于iPhone 5或更早版本)。
所以我的第一个假设是我需要避免在较旧的iOS设备上使用实例化绘图。
但是,兼容性参考文档中的iOS Device Compatibility Reference表示所有SGX Series 5处理器(包括iPhone 5和4s)都支持further down扩展名。
这让我觉得我确实可以在旧版iOS设备上使用实例绘图,方法是查找并使用EXT_draw_instanced的相应扩展功能(EXT或ARB)。
我目前只是在Windows上使用glDrawArraysInstanced和SDL运行一些测试代码,所以我还没有在iOS上测试任何内容。
但是,在我目前的设置中,我在顶点着色器中使用GLEW内置变量时遇到问题。我收到以下错误消息:
'gl_InstanceID':变量在当前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
虽然在ES 2.0上下文中我的Windows桌面计算机似乎运行良好但我怀疑这适用于iPhone 5。
那么,我是否应该放弃能够在较旧的iOS设备上使用实例绘图的想法?
答案 0 :(得分:3)
来自here:
实例化绘图可在核心OpenGL ES 3.0 API中使用 OpenGL ES 2.0通过EXT_draw_instanced和EXT_instanced_arrays 扩展。
You can see它可以在所有GPU,PowerVR SGX,Apple A7,A8上使用。
(看起来@ Shammi没有回来......如果他们这样做,你可以改变接受的答案:)