iPhone: как расставить приоритеты в элементах CFRunLoop (связанных с OpenGL)
У меня есть приложение OpenGL, которое интенсивно рендерится, а также извлекает вещи по HTTP.
Следуя примерам Apple для OpenGL, я первоначально использовал NSTimer для основного цикла рисования, прежде чем выяснить (как и все остальные), что это действительно не очень хорошая идея (потому что у вас иногда бывают огромные задержки при обработке событий касания, когда медленные краски вызывают рисование таймеры накапливаться).
Поэтому в настоящее время я использую стратегию, предоставленную пользователем godexsoft на http://www.idevgames.com/forum/showthread.php?t=17058 (поиск сообщения осуществляется godexsoft). В частности, мой цикл запуска рендеринга находится в главном потоке и содержит это:
while( CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01f, FALSE) ==
kCFRunLoopRunHandledSource);
Эта строка позволяет таким событиям, как сенсорные события и вещи, связанные с передачей, происходить между визуализацией кадров. Это работает, но я хотел бы уточнить это дальше. Можно ли как-то отдать приоритет событиям касания над другими событиями (например, связанными с вещами)? Если бы я мог сделать это, я мог бы уменьшить число 0.01f и получить лучшую частоту кадров. (Я знаю, что это может означать, что для возврата назад потребуется больше времени, но не слишком запаздывающие события касания).
1 ответ
Это не дает прямого ответа на ваш вопрос, но рассматривали ли вы вопрос об использовании CADisplayLink для планирования перерисовок? Он был представлен в iPhone OS 3.1.