Главная » Программирование игр под Android » Убираем ненужные изменения состояний – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

Рассмотрим метод presents BobTesta, чтобы узнать, где что можно урезать. Вот фрагмент кода (я добавил FPSCounter, а также glRotatef  и glScalef ):

Первое, что мы можем сделать, – переместить вызовы gl Viewport  и gl CI earColor , а также вызовы методов, которые устанавливают проекционную матрицу в метод BobScreen. resume. Цвет очистки никогда не будет меняться, равно как область просмотра и матрица проекции. Вы спросите, почему не поместить код для установки всех постоянных состояний OpenGL, таких как область просмотра или матрица проекции, в конструктор BobScreen? Дело в потере контекста. Все изменения состояний OpenGL ES будут утеряны, а когда вызывается наш экранный метод resume, мы знаем, что контекст, как и все утерянные состояния, был восстановлен. Мы также можем переместить в метод resume вызов gl EnableC и вызов привязки текстуры. Наконец, мы хотим, чтобы текстурирование было включено все время, однако мы используем только одну текстуру для Боба. На всякий случай мы перемещаем texture, reload в метод resumeO, чтобы в случае потери контекста наши данные изображения текстуры были заново загружены. Вот как будут выглядеть измененные методы present и resume:

Применение этой улучшенной версии приводит к следующим результатам на трех устройствах:

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

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии