Приложение использует OpenGL ES2 и инфраструктуру GLKit, а также цикл рендеринга/обновления, предоставляемый GLKitViewController. Раньше он работал со стабильной скоростью 60 кадров в секунду на моем iPad2 с iOS7.1, но как только я обновил iPad2 до iOS8.1, точно такой же код теперь колеблется между 56-59 кадрами в секунду. (Загрузка процессора, однако, остается на уровне 40-60%, как и раньше).
Профилирование показывает, что команды рисования OpenGL используют гораздо большую долю процессорного времени, чем раньше. Самое большое изменение, по-видимому, заключается в том, что вызовы «GLKBaseEffect prepareToDraw» занимают гораздо больше времени, чем раньше.
(Приложение использует один GLKBaseEffect, который перенастраивается в различных точках цикла рендеринга, что требует каждый раз вызова prepareToDraw. Я понимаю, что можно оптимизировать, имея несколько экземпляров GLKBaseEffect, и это то, что я рассматривал позже. , однако производительность и так была стабильной на iOS7.1)
Сейчас я изучаю трассировку OpenGL ES Analyzer в Instruments, чтобы определить вызовы OpenGL, сгенерированные «GLKBaseEffect prepareToDraw», чтобы увидеть, не кажется ли что-то необычным, и соответствующим образом обновлю сообщение, как только мне удастся что-то выяснить.
Я был бы очень признателен за любые указания о том, как двигаться дальше — почему вызовы GLKBaseEffect prepareToDraw могут занимать больше времени в iOS8.1?