GLKViewController: неверный fps - PullRequest
1 голос
/ 28 октября 2011

Надеюсь, что есть эксперты по GLKViewController, потому что у меня есть некоторые проблемы:)

Просто краткое описание моего приложения.У меня есть UINavigationController, в котором я нажимаю разные экраны.

В какой-то момент я попадаю на экран игры, который является подклассом UINavigationController.На этом экране в viewDidLoad я вручную создаю EAGLContext, GLKView и создаю новый GLKViewController (для обработки моих вызовов обновления и рисования).

Я устанавливаю предпочтительный fps равный 30.

* 1009проблема в том, что первые 3-4 вызова обновления приходят с правильным DT, но затем у меня есть 2-3 кадра с 1 секундой между ними.Я измеряю DT, используя controller.timeSinceLastUpdate.Таким образом, я получаю как:
dt=0.33
dt=0.33
dt=0.33
dt=1.07
dt=1.05
dt=0.33
dt=0.33

После этого я действую только DT раз.Я понятия не имею, почему эти кадры имеют такую ​​задержку.Я измерил время, которое у меня уходит в методе update & draw, и оно нигде не приближается к 1 секунде.

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

Кроме того, если я открою игровой контроллер экрана, а затем отодвину другой экземпляр игрового экрана, этот новый GLKViewController будет вызывать мой метод обновления только приблизительно каждые1 секунда.

Кто-нибудь имел проблемы с частотой кадров при использовании GLKViewController?

Спасибо,

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Проблема в том, что вы не знаете, что еще устройство делает между вашими обновлениями:)

Возможно, вы потратили всего 0,1 секунды, работая над следующим кадром, но если есть предупреждение о памяти, тогда другие битывашего приложения также займет время для обработки.Я думаю, что контроллер GL сделает все возможное, чтобы сохранить предпочтительную частоту кадров, но если в фоновом режиме происходит много, то с этим ничего не поделаешь.

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

Другая вещь, которую вы можете захотеть сделать, это следить за другими уведомлениями, которые могут быть переданы в ваше приложение (например, предупреждения памяти).

Наконец, есть ли шаблон для медленных кадров - они совпадают с загружаемым новым изображением или доступом к файлу?Вы сделали как можно больше заранее?РЕДАКТИРОВАТЬ - перечитывание вашего вопроса заставляет меня думать, что вы уже сделали это, извините!

Извините, я больше не могу использовать: (

0 голосов
/ 01 ноября 2011

Хорошо, так что я наконец понял это.Оказывается, это даже не связано с GLKViewController (неожиданный сюрприз!).

Это было как-то связано с тем, как я отображаю игровой контроллер, например:

Если я использую анимацию длительностью 0.3f, то я не получаю никакого лага.Иногда на 0,5f я получаю его, а на 0,7 всегда получаю.

...