В то время как другие делают хорошие предложения для общего случая OpenGL ES, я знаю, что вы, вероятно, работаете над iOS здесь, Уилл, так что есть лучшая альтернатива для конкретной платформы.Я полагаю, что в вашем случае вам будет лучше обслуживать CADisplayLink, который запускает обратные вызовы, синхронизированные с частотой обновления экрана.Используя это, вы получите гораздо более плавные обновления, чем при использовании таймера или какого-либо опроса внутри цикла.
Это особенно эффективно в сочетании с Grand Central Dispatch, как я опишу в своем ответе здесь.Когда я переключился с использования цикла на CADisplayLink для обновлений, мой рендеринг стал намного более плавным на всех устройствах iOS из-за меньшего количества пропущенных кадров.Добавление GCD к тому же сделало вещи еще лучше.
Вы можете обратиться к моему Molecules коду для примера этого в действии (см. SLSMoleculeGLViewController, чтобы узнать, как мой автоповорот анимируется этим),Шаблон приложения Apple OpenGL ES также использует CADisplayLink для обновлений, последний раз я проверял.