Closed nantas closed 10 years ago
如果只是填充率问题,可以通过将不可见Sprite的四个Vertex设到同一个点的位置来解决。
这个问题并不是由于填充率照成的,这里王楠表述有些错误。这个问题是这样的,我们测试数羊2.0在 iPhone4 和 iPhone4s, iPhone5 的运行情况时发现,iPhone4 下帧数只有 20 fps 而 iPhone4s 和 iPhone5 可以稳定在 60 fps.
在数羊项目中,我们在一开始时会Instantiate 出 200个 sheep sprite, 200 个 shadow sprite, 200 个 dust sprite 以及 200 个 tag sprite. 然后将他们的 gameObject 设置成 deactive 状态。运行过程中的 draw-call 为 16个,羊的数量稳定在 15-16 只。在 iPhone4 中的表现使我猜测是由于每帧送 vertex 的数量达到了 iPhone4 cpu 往 gpu 输送的带宽限制,所以我们做了一个简单的操作来证明这个观点,将 sprite 数量减少到 50,在 iPhone4 中就跑出了 45 fps 左右的成绩。
我们需要对 iPhone4 做进一步的 benchmark 测试来得出一个有效的优化方案。
此外,我也在猜测是否双 buffer 传输会对iPhone4有更好的优化效果。
双buffer在默认情况下就是开启的。瓶颈看能不能用Profiler测试下,不过在这之前可以拿OptimizeFillRate这个分支测试下性能是否有所改善。
如果真有GPU输送的带宽限制,可参考这个issue来修改exLayer.maxDynamicMeshVertex: https://github.com/exdev/ex2d_dev/issues/47
数羊2.0里,当sheep pool有100个以上,且在非激活状态下放在屏幕中时,会增加大概10几ms的GPU时间。
需要在iphone4上跑一下benchmark,来决定是否使用原来的切换sprite显隐策略