Прежде всего, вы тестируете производительность на симуляторе? Если это так, немедленно остановитесь и попробуйте на реальном оборудовании. Тестирование производительности на симуляторе бесполезно.
Учитывая все это, я не уверен, сколько из них вы уже реализовали, поэтому я прошу прощения, если даю вам то, что вы уже знаете:
- Если вы рисуете полноэкранный непрозрачный фон в каждом кадре, вам может не потребоваться вызов
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);
Кроме того, попробуйте захватить только этот сегмент вашего кода и посмотреть, сколько фонового изображения в секунду он может выплевывать.