Низкая производительность Android Canvas.drawBitmap - перейти на OpenGL?

Я портирую 2D-игру из Windows Phone 7 (разработанную в XNA 4.0) на Android. Я использую много вызовов Canvas.drawBitmap () - около 200-300 на обновление кадра - с разными красками для каждого вызова для обработки различной прозрачности и цветности во время рисования. Это управление системами частиц и различными другими наложениями и внутриигровыми эффектами, а также мозаичным фоном и внутриигровыми спрайтами. Я не делаю никакого изменения размера или поворота по требованию, это простые прямоугольники src-> dest одинакового размера.

На WP7 это работает со скоростью 30+ кадров в секунду, но я изо всех сил пытаюсь получить 12 кадров в секунду на моем тестовом дроиде (Samsung Galaxy S). Это делает игру неиграбельной. Профилировав код, я подтвердил, что все мое время теряется в Canvas.drawBitmap ()

Я, кажется, следую всем обычным советам по производительности - использую SurfaceView, помня о GC, чтобы не создавать множество одноразовых объектов. , и избегая Drawables.

Правильно ли я понимаю, что Canvas.drawBitmap () привязан к ЦП, и если я хочу повысить производительность, мне нужно переключиться на OpenGL, который будет использовать графический процессор? Я нигде не могу найти, чтобы это было сказано прямо, но, читая между строк некоторых комментариев, я думаю, что это может быть моим следующим шагом ...?

8
задан genpfault 15 July 2011 в 15:01
поделиться