3

我在问自己如何SurfaceView处理可见区域之外的绘图。我进行了一些在线研究,但找不到任何提出问题的人或任何回答问题的人。所以我做了一些测试,我的测试设置如下所示:

我在 a 上绘制 5000 个圆,SurfaceViewx 轴偏移为 -100,每 1000 个圆额外偏移 -100。偏移量Matrix作为翻译存储在 a 中,并在使用 绘制之前应用于画布Canvas.concat()。结果是SurfaceView在其上绘制了 5000 个圆圈,但最初它们都在可见区域之外,您在屏幕上看不到它们。我运行了我的测试应用程序,对 . 应用了一个翻译Canvas,这样圆形堆栈一个接一个地出现,并测量了每秒的帧数。所有更新和绘图都是使用一个尽可能频繁循环的简单线程完成的。

测量结果为:

  • 0 个可见圆圈 -> ~ 40 FPS
  • 1000 个可见圆圈 -> ~ 30 FPS
  • 2000 个可见圆圈 -> ~ 20 FPS
  • 3000 个可见圆圈 -> ~ 15 FPS
  • 4000 个可见圆圈 -> ~ 12 FPS
  • 5000 个可见圆圈 -> ~ 10 FPS

我需要提一下,这一切都是使用我自己的 2D 引擎完成的。在没有任何元素的情况下,它以 60 FPS 的速度运行。我认为第一个“丢失”的 20 FPS 可能是由于我的渲染管道迭代了 5000 个元素。

有谁知道更多关于SurfaceVieworCanvas并且可以解释这种行为?

提前致谢!

测试设置:Nexus 10,Android 4.2.1,最小 SDK:14,目标 SDK:17

4

1 回答 1

1

根据 WarrenFaith 发布的关于图形硬件的解释,我测量了绘制所有圆圈和绘制前检查之间的差异。事实证明完全没有区别!可以肯定的是,我什至将圆圈数增加到 50000,并且两个测试都以大约 4 到 5 FPS 的速度运行,没有可见的圆圈。

于 2013-01-09T10:48:09.960 回答