【问题标题】:Instanced drawing with OpenGL ES 2.0 on iOS在 iOS 上使用 OpenGL ES 2.0 进行实例化绘图
【发布时间】:2014-08-19 15:58:54
【问题描述】:

简而言之:

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


更长:

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

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

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

但是,further down 在兼容性参考文档中表示,所有 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

虽然这似乎在我的 Windows 桌面计算机上的 ES 2.0 环境中运行良好,但我怀疑这在 iPhone 5 上是否可行。

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

【问题讨论】:

  • 根据扩展的文档,它使变量gl_InstanceIDEXT 在顶点着色器中可用。如果 Apple 说他们支持该扩展,那么它应该可以工作。
  • 好的。但我很困惑。我的 Windows 机器说它支持 ARB_draw_instanced,但当我面向 ES 2.0 时,GLSL 中既不支持 gl_InstanceID 也不支持 gl_InstanceIDARB。我应该不担心这一点,还是表明 iOS 上的 EXT_draw_instanced 也存在同样的问题?
  • 如果在着色器中启用GL_EXT_draw_instancedgl_InstanceIDEXT 是否可用?无论哪种方式,我认为您无法从 Windows 机器上的行为中推断出很多关于 iOS 实现的信息。
  • @GuyRT:不,即使我启用了扩展,它也不可用。所以你是说我应该把这看作是我的 Windows 机器上的异常,并假设它只能在启用了扩展的 iOS 上工作?
  • Apple 支持 OpenGL ES 2.0 中的实例化绘图 developer.apple.com/library/ios/documentation/3ddrawing/… “实例化绘图可通过 EXT_draw_instanced 和 EXT_instanced_arrays 扩展在核心 OpenGL ES 3.0 API 和 OpenGL ES 2.0 中使用。”根据这个,它可以在他们所有的 GPU 上使用。developer.apple.com/library/ios/documentation/DeviceInformation/…

标签: ios opengl-es glsl glsles


【解决方案1】:

来自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 没有回来……如果他们回来了,您可以更改接受的答案:)

【讨论】:

  • PowerVR SGX 535 及更高版本。所以 iPhone 3GS 和更新版本(除原始 iPhone、iPhone 3G、iPod Touch 第 1 代或第 2 代外的所有 iDevice)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多