IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能

Posted

技术标签:

【中文标题】IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能【英文标题】:IOS: Performance of shaders with dynamic branching in OpenGL ES 2.0 vs 3.0 【发布时间】:2015-07-03 16:52:25 【问题描述】:

我有一个基于 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 个周期会降低性能......)和/或如果你经常使用透明度(例如:全屏透明quad(s) 显示在其他元素上),或者如果您将渲染目标用于后期处理。

如果您在 iPhone5S 上以 25/30fps 的速度运行,那么如果您找不到减少着色器使用的周期数量的方法(简化这些/切割效果),我认为您不能希望该应用程序在功能较弱的设备上正常工作等等)

【讨论】:

以上是关于IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.0 (iOS) 中的 2D 绘图

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

iOS OpenGL ES 2.0 VBO 混淆

OpenGL ES 2.0 - iOS - 使用 FBO 渲染到纹理

使用 OpenGL ES 2.0 和 cmake 生成 iOS 静态库