Проблемы с iPhone OpenGL и NSTimer - PullRequest
       1

Проблемы с iPhone OpenGL и NSTimer

2 голосов
/ 28 апреля 2010

У меня есть NSTimer, который работает на частоте 60 Гц. С загруженной и рендеринговой сценой OpenGL моя игра может получить 60 кадров в секунду, непрерывную работу в течение всего дня. Затем, если я пойду перекомпилирую приложение или перезагрузлю его, оно получит 40 кадров в секунду. Те же ресурсы загружены. Я сталкивался с этой проблемой в течение многих лет, и я просто хочу знать, почему. Это безумие, и я хочу знать, должен ли я просто отказаться от этого глупого Таймера. Условия не отличаются на моем 3GS между нагрузками. Иногда он будет получать 40 кадров в секунду. Очевидно, что тактовая частота не различается между нагрузками, поэтому показатели производительности должны быть постоянными при постоянной сцене. Вот журнал моей частоты кадров:

Хороший груз:: -)

FrameRate: 61 FrameRate: 61 FrameRate: 61 FrameRate: 60 FrameRate: 60 FrameRate: 61 FrameRate: 60 FrameRate: 60 FrameRate: 61 FrameRate: 60 FrameRate: 61

Теперь я пойду дальше и ничего не буду делать, перекомпилирую и выполню:

FrameRate: 43 FrameRate: 50 FrameRate: 45 FrameRate: 48 FrameRate: 40 FrameRate: 45 FrameRate: 42 FrameRate: 41 FrameRate: 42 FrameRate: 44 FrameRate: 41 FrameRate: 46

^ - Огромная разница визуально. Что, черт возьми, может вызвать это?

ЖЕ область сцены, ЖЕ настройка камеры. Переменные не отличаются.

[Редактировать] Некоторые упоминали, что музыка, не исполняемая в аппаратном декодере, может вызвать это, и что иногда декодер НЕ вступает во владение, даже если вы установили его на. Однако могу сказать, что даже при отключенной музыке такое случается [/ Edit]

1 Ответ

2 голосов
/ 28 апреля 2010

Вы пробовали использовать CADisplayLink вместо этого? Из документации :

Объект CADisplayLink - это таймер объект, который позволяет вашему приложению синхронизировать его рисунок для обновления скорость отображения.

...

Как только ссылка на отображение связана с циклом выполнения, селектор на Цель вызывается, когда экран содержимое должно быть обновлено.

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

...