Найти узкое место в приложении OpenGL на iphone - PullRequest
4 голосов
/ 04 марта 2009

Я пытаюсь найти узкое место в игре IPhone OpenGL, которую я пишу. Сама игра в 2d и содержит пару сотен текстурированных спрайтов, каждый из которых имеет альфа-смешивание.

С точки зрения текстур, я использую только один атлас 512x512, который связываю один раз, поэтому я не думаю, что это проблема пропускной способности (по крайней мере, из-за загрузки текстур).

Я использовал инструменты для отслеживания загрузки процессора, использования памяти и использования OpenGL ES. В тяжелом моменте игры я увидел следующее:

FPS: 20 Процессор: 60% Реальный Mem: 17Mb Коэффициент использования плит: 21% Предоставленное использование: 45%

Я немного сбит с толку относительно того, что может быть узким местом? Насколько высоко может использоваться процессор (я знаю, что одновременно работают другие приложения), прежде чем он станет узким местом? 60% звучит примерно так?

Или это может быть количество графики? Я не думаю, что использование tiler + renderer настолько низкое. Но я должен признаться, что я не эксперт в чтении этих результатов.

Будем с благодарностью приняты за любые указатели на то, что является моим вероятным узким местом, или на то, где еще можно их найти!

Ответы [ 5 ]

4 голосов
/ 04 марта 2009

Если вы этого еще не сделали, прочитайте Оптимизация OpenGL ES для iPhone OS , у нее есть много полезных советов о том, как писать быстрые приложения OpenGL на iPhone.

4 голосов
/ 04 марта 2009

Процессор звучит немного высоко, вы используете много тригонометрических функций, таких как sin / cos? Иногда они используются плохо, то есть для систем частиц. Постарайтесь свести их к минимуму или, если возможно, используйте таблицу поиска.

Здесь - хорошее обсуждение приближений

1 голос
/ 04 марта 2009

В то время как ваше «рендеринг» использует низко, я предполагаю, что это сторона процессора вызовов OpenGL. Вы можете думать об этой части как о создании списка вещей, которые нужно сделать графическому процессору, когда вы используете glFlush / glFinish. Как только вы вызываете один из них, GPU фактически должен выполнить то, что вы настроили.

Хотя я не работал над iPhone, похоже, вы привязаны к GPU. Итак, вот список вещей, которые я бы проверил (не работая непосредственно на iPhone), чтобы определить, сколько времени потребуется для расследования:

  1. Вы звоните glFinish? Если это так, попробуйте использовать блоки glFlush - glFinish, пока GPU делает свое дело.

  2. Если вы отключите альфа-смешивание, вы заметите заметное ускорение? Я не думаю, что это очень вероятно, но это должно быть быстро проверить.

  3. Выполняете ли вы какие-либо отбраковки ваших объектов или вы рендеринге всех своих объектов каждый кадр?

Есть ли в iPhone какой-нибудь профиль GPU?

1 голос
/ 04 марта 2009

Вы проверили, какие строки вашего кода выполняются большую часть времени? Я почти уверен, что в Инструментах есть инструмент для этого.

0 голосов
/ 23 марта 2009

Как вы реализовали свою 2D игру? Отображается ли каждый отдельный спрайт на свой собственный треугольник с парным многоугольником? или вы визуализируете каждый спрайт на поверхности текстуры 512x512?

Для последнего метода изменение текстуры для каждого кадра может привести к значительному снижению производительности и не рекомендуется в документации; Это немного неприятно, но glDrawTex может обойти это, но я не проверял это и не уверен, что это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...