OpenGL на Android против iOS: оптимизация и где они отличаются

Я кодирую приложение OpenGL ES 1.1 для Android и iPhone. Механизм OpenGL ES живет в общей библиотеке и доступен через NDK на Android.

Я хочу оптимизировать свою производительность OpenGL. Там много видео и ресурсов, например:

http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40008793-CH105

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

OpenGL ES 2.0: поиск рекомендаций по оптимизации / оптимизации VBO для многих движущихся вершин

Когда VBOs быстрее, чем «простые» примитивы OpenGL (glBegin ())?

https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips

Но обычно существуют хорошо известные методы, которые применяются повсеместно, например:

  • Использовать объекты буфера вершин (VBOs)
  • Сведение к минимуму изменений состояния OpenGL
  • Используйте текстурирование, чтобы избежать необходимости выбирать много разных текстур

Некоторые методы являются или могут быть более чувствительными по своей специфике и могут отличаться от Android и iPhone, и это то, что меня интересует. Например:

  • Перемешайте данные вершин внутри каждой вершины: например, координата вершин; Координация текстуры; нормальный. Есть ли предпочтительный порядок элементов в чередовании?
  • Отложите каждую вершину до следующего кратного некоторого количества байтов. Я вижу, что число 32 связано, но также видно 4 или 8 в некоторых местах.
  • Рассмотрите возможность использования короткого или схожи для каждой координаты Вершины, а не поплавка

Поэтому мой вопрос: каковы более тонкие детали волшебных оптимизаций, таких как последний список выше, который отличается от Android и iPhone? Где они отличаются, какова лучшая стратегия? Просто используйте значение, которое подходит для обоих миров? (Точная настройка таких деталей во время выполнения в зависимости от платформы может быть немного выше)?

Основные (ортодоксальные) оптимизации упоминаются в ответе. Однако существуют и другие менее известные методы, которые применимы к рендерингу на мобильных устройствах:

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

  2. Используйте профилировщики, специфичные для поставщиков, для точной настройки кода для определенных фишек. Используйте разные пути кода, если производительность значительно варьируется от поставщика к поставщику.

  3. Еще раз, пополнение на мобильных устройствах имеет значение. Используйте меньшие типы данных, меньше выборки текстур. Это особенно верно для дисплея сетчатки Apple на новом iPad. Предпочитайте вычисления над текстурными поисками для разумных формул (вы должны профиль).