iOS 11中的GLES性能瓶颈(见6S +)

时间:2018-08-01 14:28:39

标签: performance opengl-es-2.0 ios11

编辑:这不是代码瓶颈。分析显示相同的CPU使用率,而与GPU ms的波动无关。另外,我第一次发布时不正确地谈论glbufferdata;这是glbuffersubdata。

作为针对我们应用的Android构建的优化驱动器的一部分,我重新组织了引擎的渲染管道,从而显露了iOS11下某些iOS设备上非常明显的性能瓶颈。

我们的引擎管理2D几何(UI)和3D静态模型的混合场景。 2D几何是动态的,并在每个帧中生成。

直到最近,每次必须发出2D绘图调用(纹理更改,混合模式更改或着色器更改)时,到目前为止生成的sprite数据都将通过glbuffersubdata上载,然后进行渲染。在iOS上很好,在Android上没那么好。

为了提高Android的性能,我使引擎将所有2D几何体放入单个数据缓冲区中,并在下一帧开始时通过一次glbuffersubdata调用将其上载到单个VBO,然后使用子部分执行绘图调用该缓冲区。这导致Android设备的显着增长,并且对我们的某些iOS测试设备(例如运行iOS10的iPod Touch 6)没有影响。

但是,在运行iOS 11的6S +上,新的管线将GPU时间从稳定的8ms增加到了大幅波动的10-14ms,通常将游戏的速度降低到了30fps(而不是60fps)。以前通过iOS更新,以前无害的东西已经成为性能下降。

我现在已经将缓冲作为编译选项,并重新获得了iOS上的性能损失,但是如果您要生成大量的动态几何图形并在iOS11上为性能而苦苦挣扎,那么如果您停止尝试,可能会发现有所改善批量上传glbuffersubdata上传文件,而是执行散布在渲染调用中的较小文件。

0 个答案:

没有答案