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.

Другие вопросы по тегам