Ограничение скорости FPS на iPhone? - PullRequest
4 голосов
/ 27 декабря 2011

Как мне ограничить частоту FPS в моем приложении OpenGL (я использую CADisplayLink), чтобы я мог оставить ЦП для других целей?

Ответы [ 3 ]

6 голосов
/ 28 декабря 2011

Хотя на этот вопрос уже был дан ответ, я бы хотел немного его расширить.

В действительности рекомендуется использовать CADisplayLink и frameInterval, чтобы ограничить базовую частоту кадров, но на самом оборудовании дисплей имеет фиксированную частоту обновления иМетод CADisplayLink синхронизирует обновление оборудования с вызовом наших методов рисования, поэтому у методов рисования больше всего времени для работы.

Поскольку CADisplayLink генерируется аппаратно, единственное, что вы можете с ним сделать, это разделить время, вот чтоframeInterval готов сделать.

frameInterval = 1 дает вам 60 кадров в секунду

frameInterval = 2 дает вам 30 кадров в секунду

frameInterval = 3 получает 20 кадров в секунду

Я, например, много использую frameInterval = 5 для меню, оно по-прежнему дает мне 12 кадров в секунду (примерно минимум для разумной простой анимации), а потребление батареи резко сокращается.

Я также использовал динамическое изменение частоты кадров, измеряя среднюю частоту кадров и выбираяt, помогает сохранять игровую текучесть.

FPS вне этих значений не очень стабильны и обычно приводят к дрожанию анимации, временной интервал, с которым мы должны работать, составляет 1/60 с, поэтому только кратныеэто создаст плавную анимацию.Даже если вы не используете CADisplayLink и не делаете идеальную временную маршрутизацию, чтобы доставить что-то еще, аппаратное обеспечение будет работать с этим временным интервалом.

4 голосов
/ 27 декабря 2011

Как правило, вы не контролируете частоту обновления, если для рисования своего приложения вы используете рекомендованный Apple метод CADisplayLink . Однако вы можете установить для свойства frameInterval значение, превышающее единицу, чтобы пропускать рамки рисования, снижая частоту кадров. Например, frameInterval = 2 должно дать вам примерно 30 кадров в секунду вместо 60 кадров в секунду.

Может оказаться более полезным взглянуть на размещение какой-либо работы приложения в другом потоке или оптимизировать задачи рисования, чем выбирать частоту кадров.

4 голосов
/ 27 декабря 2011

Я не получил термин «ограничить мою частоту кадров в секунду» из функции.но для того, чтобы ваше приложение openGL работало гладко, оно должно иметь FPS до 60 (в iOS 5), и вы должны поддерживать (я думаю, в вашем случае предел), что FPS для лучшей производительности.

Xcode предоставляет множество инструментов, которые помогутвы анализируете и настраиваете свои приложения OpenGL ES, как описано в Руководстве по программированию OpenGL ES для iOS :

Детектор производительности OpenGL ES - Впервые представлен в Xcode4, OpenGL ES Performance Detective быстро помогает вам определить, является ли OpenGL ES основным узким местом в вашем приложении;это должен быть первый инструмент, который вы запускаете для тестирования своего кода OpenGL ES.Основное преимущество OpenGL ES Performance Detective заключается в том, что он может автоматически направить вас немедленно в критическое место в вашем приложении, которое больше всего замедляет производительность OpenGL ES.Чтобы использовать детектор производительности OpenGL ES, запустите инструмент и используйте его для выбора приложения на устройстве под управлением iOS, подключенном к компьютеру разработчика.Когда ваше приложение достигнет интересующего вас местоположения, нажмите кнопку «Собрать доказательства».OpenGL ES Performance Detective записывает команды OpenGL ES, которые ваше приложение генерирует в виде серии кадров, анализирует команды для выявления узких мест и выдает конкретные рекомендации по производительности.Детектор производительности OpenGL ES можно найти в каталоге / Developer / Applications / Graphics Tools /.

Инструменты (анализ OpenGL ES) - также представлен в Xcode 4, инструмент анализа OpenGL ESпредоставляет ряд функций, которые помогут вам изучить использование OpenGL ES вашим приложением.Средство анализа OpenGL ES записывает команды OpenGL ES, сгенерированные вашим приложением, и предупреждает вас, когда ваше приложение не следует рекомендациям, описанным в этом руководстве по программированию;он рекомендует конкретные изменения, которые вы можете внести, чтобы следовать рекомендациям.Инструмент OpenGL ES Analysis позволяет увидеть все команды, используемые для создания каждого кадра анимации.Наконец, инструмент анализа OpenGL ES позволяет вам выборочно отключать части графического конвейера, чтобы определить, является ли эта часть конвейера существенным узким местом в вашем приложении.Инструмент OpenGL ES Analysis предоставляет вам отличный набор инструментов для ручного анализа вашего приложения и понимания его внутренней работы.Однако он не указывает автоматически на то место, где ваше приложение в настоящее время является узким местом.Например, даже если в нем содержится предложение о том, как улучшить ваши методы кодирования OpenGL ES, это предложение не означает, что изменение кода автоматически приведет к повышению производительности вашего приложения.

Инструменты (Драйвер OpenGL ES) - Инструмент драйвера OpenGL ES предоставляется в Xcode 3 и более поздних версиях.Он не анализирует напрямую команды OpenGL ES, отправленные вашим приложением.Вместо этого он позволяет вам отслеживать ключевые статистические данные о том, как графическое оборудование используется вашим приложением.Например, вы можете использовать его для отслеживания количества байтов, используемых для хранения данных текстуры, и того, как эти числа меняются от кадра к кадру.

...