Я кодирую приложение OpenGL ES 1.1 для Android и iPhone. Механизм OpenGL ES живет в общей библиотеке и доступен через NDK на Android.OpenGL на Android против iOS: оптимизация, и где они отличаются
Я ищу оптимизацию производительности OpenGL. Там есть много видео и ресурсов там, например .:
http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/
OpenGL ES 2.0 : Seeking VBO Performance/Optimisation Tips For Many Moving Vertices
When are VBOs faster than "simple" OpenGL primitives (glBegin())?
https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips
Но вообще есть хорошо известные методы, которые применяются повсеместно, такие как:
- Использование буфера вершин объектов (РВО)
- Минимизация OpenGL изменений состояния
- Использование текстуры atlassing, где это возможно, чтобы избежать того, чтобы выбрать много разных текстур
Некоторые методы являются или могут быть более чувствительными по своей специфике и могут отличаться от Android и iPhone, и это то, что меня интересует. le:
- Промежуте данные вершин внутри каждой вершины: например. вершинная координация; координация текстуры; нормальный. Есть ли предпочтительный порядок элементов в перемежении?
- Отложите каждую вершину до следующего кратного некоторого количества байтов. Я вижу, что число 32 связано, но также видно 4 или 8 в некоторых местах.
- Рассмотрите возможность использования короткого замыкания или аналогичной для каждого Vertex координаты, а не поплавок
Так что мой вопрос: какие тонкие детали волшебных оптимизаций, таких как последний список выше, которые отличаются между Android и iPhone ? Где они отличаются, какова лучшая стратегия? Просто используйте значение, которое подходит для обоих миров? (Точная настройка таких деталей во время выполнения в зависимости от платформы может быть немного выше?)
Я не эксперт в этой области, но AFAIK оптимизация в основном зависит от базового чипа. IPhones (немного) более согласованы в чипах GPU, но в android у вас может быть несколько чипов GPU: Adreno 2xx, PowerVR SGXxxx, Malixxx, Tegra2. Существуют различия в функциональности. Кроме того, просто из любопытства? Почему вы используете 1.1, а не 2.0? Я думаю, что с программируемыми шейдерами вы можете лучше оптимизировать код (и, конечно же, ваше приложение будет поддерживать меньше устройств ... но AFAIK в настоящее время поддерживает все сторонние устройства Android 2.0) –
Что касается использования OpenGL ES1.1: это вопрос поддержки некоторых старых устройств , Хороший вопрос о чипсете! – MeinHeinlein