Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance iOS 11中的性能瓶颈(见6S+;)_Performance_Opengl Es 2.0_Ios11 - Fatal编程技术网

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

Performance iOS 11中的性能瓶颈(见6S+;),performance,opengl-es-2.0,ios11,Performance,Opengl Es 2.0,Ios11,编辑:这不是代码瓶颈。评测显示相同的CPU使用率,而不考虑GPU的波动。我第一次发布时也错误地谈论了glbufferdata;它是GLBUFFERSUBSDATA 作为应用程序Android版本优化的一部分,我重新组织了引擎的渲染管道,暴露了iOS11下某些iOS设备上的一个非常严重的性能瓶颈 我们的引擎管理2D几何体(UI)和3D静态模型的混合场景。二维几何图形是动态的,并在每个帧中生成 直到最近,每次必须发出2D绘制调用(纹理的更改、混合模式或着色器的更改等),到目前为止生成的精灵数据都将通

编辑:这不是代码瓶颈。评测显示相同的CPU使用率,而不考虑GPU的波动。我第一次发布时也错误地谈论了glbufferdata;它是GLBUFFERSUBSDATA

作为应用程序Android版本优化的一部分,我重新组织了引擎的渲染管道,暴露了iOS11下某些iOS设备上的一个非常严重的性能瓶颈

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

直到最近,每次必须发出2D绘制调用(纹理的更改、混合模式或着色器的更改等),到目前为止生成的精灵数据都将通过glbuffersubdata上传,然后进行渲染。这在iOS上很好,在Android上就不那么好了

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

然而,在6S+运行iOS 11的情况下,新管道将GPU时间从岩石般稳定的8ms增加到剧烈波动的10-14ms,通常将游戏速度降低到30fps,而不是60 fps。这已经不是第一次因为iOS更新而导致以前无害的性能下降了


我现在已经将缓冲设置为编译选项,并恢复了iOS上丢失的性能,但是如果您正在生成大量动态几何图形,并且在iOS11上的性能很差,如果您停止尝试批处理glbuffersubdata上载,而执行较小的上载,同时执行渲染调用,则可能会看到改进。

您应该尽可能使用
glbuffersubdata
而不是
glBufferData
,以避免重新分配内存。至于您的问题,您应该尝试分析您的代码,以查看问题的确切位置。问题不在代码中。代码在相同的时间内执行,而不管时间长短;GPU的时间波动很大。此外,我在键入时犯了一个错误:我们确实使用glbuffersubdata。我会将这些信息添加到帖子中以避免混淆。谢谢