Я кодирую приложение OpenGL ES 1.1 для Android и iPhone. Механизм OpenGL ES живет в общей библиотеке и доступен через NDK на Android.
Я хочу оптимизировать свою производительность OpenGL. Там много видео и ресурсов, например:
http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/
OpenGL ES 2.0: поиск рекомендаций по оптимизации/оптимизации VBO для многих перемещаемых вершин
Когда VBOs быстрее, чем "простые" OpenGL-примитивы (glBegin())?
https://gamedev.stackexchange.com/info/1068/opengl-optimization-tips
Но обычно существуют общеизвестные методы, которые применяются повсеместно, например:
- Использовать объекты буфера вершин (VBOs)
- Сведение к минимуму изменений состояния OpenGL
- Использовать текстурирование, чтобы избежать необходимости выбирать различные текстуры.
Некоторые методы являются или могут быть более чувствительными по своей специфике и могут отличаться от Android и iPhone, и что меня интересует. Например:
- Перемещайте данные вершин внутри каждой вершины: например, вершинная координация; координация текстуры; нормальный. Есть ли предпочтительный порядок элементов в перемежении?
- Разложите каждую вершину на следующую кратность некоторого количества байтов. Я вижу, что число 32 связано, но также есть 4 или 8 в некоторых местах.
- Рассмотрите возможность использования короткой или аналогичной для каждой координаты Вершины, а не float
Итак, мой вопрос: каковы более тонкие детали волшебных оптимизаций, таких как последний список выше, который отличается от Android и iPhone? Где они отличаются, какова лучшая стратегия? Просто используйте значение, которое подходит для обоих миров? (Точная настройка таких деталей во время выполнения в зависимости от платформы может быть немного выше)?