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

时间:2014-08-19 15:58:54

标签: ios opengl-es glsl glsles

简而言之:

任何人都可以确认是否可以在启用了gl_InstanceID的iOS上使用OpenGL ES 2.0的顶点着色器中使用内置变量gl_InstanceIDEXT(或GL_EXT_draw_instanced)?


长:

我想使用glDrawArraysInstancedgl_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上使用glDrawArraysInstancedSDL运行一些测试代码,所以我还没有在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设备上使用实例绘图的想法?

1 个答案:

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