Самый быстрый способ визуализации фона 480 x 320 в виде текстур iPhone OpenGL ES - PullRequest
4 голосов
/ 20 апреля 2010

Мне нужно отобразить фоновое изображение 480 x 320 в OpenGL ES. Дело в том, что я испытал некоторое замедление в iPhone, когда я использовал 512 x 512 размеров текстуры Поэтому я нахожу оптимальный вариант для рендеринга фона размера iPhone в OpenGL ES. Как мне нарезать фон в этом случае, чтобы получить максимально возможную производительность? Моя главная забота - скорость. Должен ли я пойти на 256 х 256 или других размеров текстуры здесь?

1 Ответ

7 голосов
/ 03 июня 2010

Прежде всего, вы тестируете производительность на симуляторе? Если это так, немедленно остановитесь и попробуйте на реальном оборудовании. Тестирование производительности на симуляторе бесполезно.

Учитывая все это, я не уверен, сколько из них вы уже реализовали, поэтому я прошу прощения, если даю вам то, что вы уже знаете:

  • Если вы рисуете полноэкранный непрозрачный фон в каждом кадре, вам может не потребоваться вызов GL_CLEAR
    • gmaclachlan указывает, что вы должны очищать буферы при каждом запуске из соображений производительности, однако это противоречит некоторому другому опыту пользователя. Это может отличаться между версиями оборудования и iOS; однако производительность можно проверить, просто закомментировав строку. Проверка до и после.
    • Если вы вообще используете ось Z (т. Е. 3D-объекты на 2D-фоне, подумайте, New Super Mario Bros ), вам нужно очистить буфер глубины
  • Используйте сжатие текстур (PVRTC), если артефакты сжатия не являются проблема, это аппаратное ускорение
  • Используйте 16-битную текстуру для фона, если вы не можете использовать PVRTC
  • Убедитесь, что вы не пытаетесь провести глубинный тест / альфа-смешение фона, если под ним ничего нет
  • Используйте расширение OES_Draw_Texture , если вы используете с фиксированной функцией

    int rect[4] = {0, 0, 480, 320};
    glBindTexture(GL_TEXTURE_2D, texBackground);
    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
    glDrawTexiOES(0, 0, z, 480, 320);

Кроме того, попробуйте захватить только этот сегмент вашего кода и посмотреть, сколько фонового изображения в секунду он может выплевывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...