我正在尝试Android 2D API(我在这里学到了很多东西),并且在使用Alpha Bloding时,我注意到我的蜂窝平板电脑上有一些令人担忧的性能问题(TF101):

canvas.drawBitmap(bmBackground, 0,0, null);                     
canvas.drawBitmap(bmForeground, 0, 0, p);

上面的代码是使用众所周知的SurfaceView/thread awer渲染的。 bmbackground是RGB_565,BMForeground是一个可变的ARGB_8888,油漆P仅用于使用Alpha。两个位图都是全屏。

在我的Nexus s和Galaxy s(姜饼)上,无论我设置的alpha值还是BM Foreground的任何像素格式(RGB_565或argb_88888),渲染效果的运行量为55 fps。

但是在我的蜂窝平板电脑上,我有些奇怪的行为:

  • 60 fps with alpha disabled(= 0)
  • 10 fps,0 <alpha <255
  • p = null的20 fps
  • 60 fps with bmforeground = rgb_565

在使用Alpha混合和/或从ARGB(位图)转换为RGB(FrameBuffer)时,驱动程序似乎存在一些性能问题吗?

我已经知道OpenGL解决方案,但是我想了解这里正在发生的事情,并找到一种解决方法。

一个以1GHz运行的双核心设备不能比我的Galaxy S绘制2个位图更好的双核心设备,真是太棒了!我想念什么吗?

有帮助吗?

解决方案

没有驱动程序问题,在SurfaceView上使用画布渲染完全是在软件中完成的。拥有2个核心甚至1 GHz并不一定会有帮助,大多数情况下与位图有关的是内存带宽,而Galaxy S确实擅长于此。

您还假设您的Framebuffer是RGB,但您不指定哪个RGB(RGBX 8888或RGB565?)如何创建SurfaceView?最小化转换非常重要(如果您的SurfaceView为RGBX 8888,请不要使用RGB 565位图,如果您的表面为RGB 565,请避免使用RGBA 8888位图等)。

您还没有提及您的位图有多大?如果您的两个位图都是全屏幕图,则如果平板电脑具有与Motorola Xoom相同的架构(基于Tegra2)相同的架构,那么您所获得的性能就不会出乎意料。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top