2011-12-16 1 views
10

Я кодирую приложение 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/

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

+3

Я не эксперт в этой области, но AFAIK оптимизация в основном зависит от базового чипа. IPhones (немного) более согласованы в чипах GPU, но в android у вас может быть несколько чипов GPU: Adreno 2xx, PowerVR SGXxxx, Malixxx, Tegra2. Существуют различия в функциональности. Кроме того, просто из любопытства? Почему вы используете 1.1, а не 2.0? Я думаю, что с программируемыми шейдерами вы можете лучше оптимизировать код (и, конечно же, ваше приложение будет поддерживать меньше устройств ... но AFAIK в настоящее время поддерживает все сторонние устройства Android 2.0) –

+0

Что касается использования OpenGL ES1.1: это вопрос поддержки некоторых старых устройств , Хороший вопрос о чипсете! – MeinHeinlein

ответ

1

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

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

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

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

Смежные вопросы