Я в своих первых попытках использовать Android 2D API (я многому здесь научился), и во время игры с альфа-блендингом я заметил некоторую тревожную проблему с производительностью на моем планшете Honeycomb (TF101):
canvas.drawBitmap(bmBackground, 0,0, null);
canvas.drawBitmap(bmForeground, 0, 0, p);
Приведенный выше код отображается с использованием хорошо известной пары SurfaceView / Thread. bmBackground - RGB_565, bmForeground - изменяемый ARGB_8888, краска p - для игры только с альфой. Обе растровые изображения являются полноэкранными.
Как на Nexus S, так и на Galaxy S (Gingerbread) рендеринг выполняется со скоростью 55 кадров в секунду независимо от значения альфа-канала, установленного для p, и любого формата пикселя для bmForeground (RGB_565 или ARGB_8888).
Но на моем сотовом планшете у меня странное поведение:
- 60 кадров в секунду с отключенной альфа (= 0)
- 10 кадров в секунду с 0 <альфа <255 </li>
- 20 кадров в секунду с p = null
- 60 кадров в секунду с bmForeground = RGB_565
Кажется, что драйвер имеет некоторые проблемы с производительностью при использовании альфа-смешения и / или преобразования из ARGB (Bitmap) в RGB (framebuffer)?
Я уже знаю о решении OpenGL, но я хотел бы понять, что здесь происходит, и найти способ решить его.
Было бы здорово, если бы двухъядерное устройство с тактовой частотой 1 ГГц не могло работать лучше, чем мой Galaxy S, рисующий 2 растровых изображения! Я что-то упустил?