Как найти лучший PixelFormat для Android SurfaceView - PullRequest
5 голосов
/ 12 января 2012

Я обнаружил, что изменение формата пикселей в SurfaceView сильно влияет на частоту кадров.Однако я не могу найти способ выбрать лучший формат для каждого устройства.

Пример:

@Override
public void surfaceCreated(final SurfaceHolder holder) {
    //This line seems to fix speed issue with his res devices
    holder.setFormat(PixelFormat.RGBA_8888);
    androidGame.setSurfaceHolder(holder);
}

Это заставляет мою игру работать намного быстрее на Galaxy Nexus(ICS 4.0), но медленно на Motorola Xoom (3.2.1).

Если я перехожу на PixelFormat.OPAQUE, ситуация меняется.Nexus медленный, а Xoom теперь быстрый.Поэтому мне нужно определить лучший формат для каждого устройства.Я пытался использовать getWindow (). GetAttributes (). Format, но это всегда возвращает -1 (OPAQUE).

Ответы [ 2 ]

5 голосов
/ 06 июля 2012

Мне удалось поговорить с Романом Гаем на Google IO 2012 в рабочее время. К сожалению, нет разумного способа определить лучший формат пикселя для использования. Вам нужно будет запустить тест производительности на каждом устройстве, чтобы найти его лучший формат.

2 голосов
/ 13 января 2012

Display.getPixelFormat () получит формат пикселя для вашего дисплея. Я бы порекомендовал сделать это таким образом.

Этот метод больше не поддерживается и всегда будет возвращать RGBA_8888.

/**
 * Gets the pixel format of the display.
 * @return One of the constants defined in {@link android.graphics.PixelFormat}.
 *
 * @deprecated This method is no longer supported.
 * The result is always {@link PixelFormat#RGBA_8888}.
 */
@Deprecated
public int getPixelFormat() {
    return PixelFormat.RGBA_8888;
}
...