4

简而言之:

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


更长:

我想使用glDrawArraysInstancedgl_InstanceID绘制一个对象的多个实例,并且我希望我的应用程序可以在包括 iOS 在内的多个平台上运行。

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

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

然而,兼容性参考文档的后面,它说所有 SGX 系列 5 处理器(包括 iPhone 5 和 4s)都支持EXT_draw_instanced扩展。

这让我觉得我确实也可以在较旧的 iOS 设备上使用实例绘图,方法是查找并使用glDrawArraysInstanced的适当扩展函数(EXT 或 ARB) 。

我目前只是在 Windows 上使用SDLGLEW运行一些测试代码,所以我还没有在 iOS 上测试过任何东西。

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

'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 设备上使用实例绘图的想法吗?

4

1 回答 1

3

这里

实例化绘图在核心 OpenGL ES 3.0 API 和 OpenGL ES 2.0 中通过 EXT_draw_instanced 和 EXT_instanced_arrays 扩展可用。

你可以看到它在他们所有的 GPU、PowerVR SGX、Apple A7、A8 上都可用。

(看起来@Shammi 没有回来……如果他们回来了,您可以更改接受的答案:)

于 2015-07-16T10:32:04.207 回答