IOS:在OpenGL ES 2.0中具有动态分支的着色器的性能vs 3.0

问题描述:

我有一个基于OpenGL ES 3.0的IOS应用程序,我将把它移植到ES 2.0。它包含一些昂贵的着色器,我猜,循环和ifs。虽然应用程序在OpenGL ES 3.0设备上正常运行,但我不确定它是否能在ES 2.0设备上运行良好(我没有)。所以我想知道较旧的IOS设备处理动态分支结构与较新的设备相比有多好?有没有人看过一些相关的基准?IOS:在OpenGL ES 2.0中具有动态分支的着色器的性能vs 3.0

这不是一个GLES2或GLES3问题,因为您可以在GLES3.0设备上使用GLES2.0(甚至GLES1.0)。

这是关于GPU的片段处理能力,处理每帧需要的片段数量,着色器的周期成本(您可以使用可在PVRShaderEditor工具中找到的工具Imagination Technologies网站)以及如何阅读着色器中的纹理。

功能较弱的ES3.0兼容设备是iPhone 5S。因此,如果你目前在5S上有60fps的恒定值,那么对于像iPhone5和4S这样的设备我就不会太担心了,你可能会得到20fps或更高的20fps。在iPad2/3上,您可能需要使用降低的分辨率,因为那些屏幕很大,GPU可能无法使用。 现在对于iPhone4来说,这是另一个故事......当设备在着色器中执行复杂的事情时,这个设备非常慢(超过20个周期会导致性能下降)和/或如果你使用透明度很多(例如:全屏透明四边形显示在其他元素上)或者如果您使用渲染目标进行后处理。

如果你在iPhone5S的25/30fps,那么我认为你不能希望应用程序在功能较弱的设备上正常工作,如果你没有找到一种方法来减少你的着色器使用的周期数量(简化/切割效果等)