Android Canvas的性能较差.drawBitmap -切换到OpenGL



我正在将一款2D动作游戏从Windows Phone 7(基于XNA 4.0开发)移植到Android上。我正在使用Canvas.drawBitmap()调用的lot -每帧更新约200-300次-每次调用使用不同的paint来处理绘制时不同的透明度和颜色。这是管理粒子系统和各种其他覆盖和游戏内效果,以及平铺背景和游戏内精灵。我没有做任何按需调整大小或旋转,它只是简单的src->dest相同大小的矩形。

在WP7上以30+fps运行,但我在测试的机器人硬件(三星Galaxy S)上努力获得12fps。这使得游戏无法玩。分析代码后,我确认所有的时间都在Canvas.drawBitmap()

中丢失了。

我似乎遵循了所有通常的性能建议-使用SurfaceView,注意GC,所以不要创建大量的一次性对象,并避免Drawables。

我是否正确理解Canvas.drawBitmap()是cpu绑定的,如果我想提高性能,我必须切换到OpenGL,这将使用GPU?我在任何地方都找不到这样的说法,但从一些评论的字里行间看出来,我认为这可能是我的下一步…?

这是正常的。Canvas在使用透明(如ARGB_8888)时非常慢。

2选项:

  • 切换到OpenGL ES
  • 在您的位图上使用尽可能少的透明度(即尽可能使用RGB_565)。

也许这将在Android 3+上运行得更好,因为它使用硬件加速画布操作

最新更新