我有一个基于 OpenGL ES 3.0 的 IOS 应用程序,我将把它移植到 ES 2.0。它包含带有一些昂贵的着色器,我猜,循环和 ifs。尽管该应用程序在支持 OpenGL ES 3.0 的设备上正常运行,但我不确定它是否会在 ES 2.0 设备(我没有)上运行良好。所以我想知道与较新的相比,较旧的 IOS 设备处理动态分支结构有多好?有没有人看过一些相关的基准?
1 回答
这不是 GLES2 或 GLES3 的问题,因为您可以在 GLES3.0 设备上使用 GLES2.0(甚至 GLES1.0)。
这更多的是关于 GPU 的片段处理能力、处理每帧所需的片段数量、着色器的周期成本(您可以使用 PVRShaderEditor 工具进行评估,该工具可以在 Imagination Technologies 网站上找到)以及如何在着色器中读取纹理。
功能较弱的 ES3.0 兼容设备是 iPhone 5S。
因此,如果您目前在 5S 上保持恒定的 60fps,那么对于 iPhone5 和 4S 等设备我不会太担心,您可能会获得 20 到 30fps 或更多。在 iPad2/3 上,您可能需要使用降低的分辨率,因为它们具有大屏幕并且 GPU 可能不会跟随。现在对于 iPhone4,这是另一个故事......当试图在着色器中做复杂的事情时,这个设备非常慢(超过 ~20 个周期会降低性能......)和/或如果你经常使用透明度(例如:全屏透明显示在其他元素上的四边形),或者如果您使用渲染目标进行后期处理。
如果您在 iPhone5S 上以 25/30fps 的速度运行,那么我认为如果您找不到减少着色器使用的周期数量的方法(简化这些/切割效果等),您就不能希望该应用程序在功能较弱的设备上正常工作。