В моих живых обоях я рисую 3 текстурированных квадрата, которые покрывают весь экран.На Nexus One я получаю 40fps.Я ищу способы повышения производительности.
Четыре квадрата смешаны друг с другом, текстуры загружаются из растровых изображений RGB_8888.Текстуры имеют размер 1024x1024.
У меня есть
glDisable(GL_DITHER);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glDisable(GL10.GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Вещи, которые я пробовал, все с одинаковыми 40 кадрами в секунду:
- Уменьшите размер текстуры до 512x512и 256x256
- Использовать расширение draw_texture
- Отключить смешивание
- Изменить фильтрацию текстуры с GL_LINEAR на GL_NEAREST
- Использовать VBO (отчаянная попытка, поскольку всего 3 квадратора)...)
- Запуск кода рисования в автономном режиме (если живые обои как-то влияют на производительность)
Если я рисую 2 слоя вместо 3, fps возрастает до 45или около того, тогда при рисовании всего 1 слоя число кадров в секунду возрастает до 55. Я предполагаю, что я ограничен скоростью заполнения, поскольку отключение и включение потенциально дорогостоящих функций приводят к тому же самому кадру в секунду, и единственное, что, по-видимому, улучшает число кадров в секунду, этопросто рисую меньше ...
Я размышляю над идеей сжатия текстур, но поддержка различных форматов сжатия не кажется забавной.ETC1 не имеет альфа-канала, который мне нужен, и я не уверен, что PVRTC и ATITC можно использовать даже из Java и OpenGL ES 1.0 или 1.1.
Я был бы рад услышать идеи о том, что ещепытаться.Я могу дать указатель на текущую версию обоев и скриншотов, если это используется.