Разница между glkView: drawInRect: и glkViewControllerUpdate :?OpenGL ES 2 - iOS - PullRequest
5 голосов
/ 13 марта 2012

Какова должна быть разница между этими двумя методами в моем цикле рендеринга?

У Apple есть это, чтобы сказать ....

Об обновлении () Контроллер представления вызывает его делегат glkViewControllerUpdate: метод.Ваш делегат должен обновить данные фрейма, которые не включают рендеринг результатов на экран.

О drawInRect: объект GLKView делает свой контекст OpenGL ES текущим контекстом и связывает свой кадровый буфер как цельдля команд рендеринга OpenGL ES.Ваш метод делегата должен затем нарисовать содержимое представления.

Таким образом, в основном, когда я создаю GLKView в моем контроллере представления, этот контроллер становится более поздним, поэтому я смотрю на эти методы рядом.

Я предполагал, что update () должен содержать любые преобразования или другую логику.

1 Ответ

4 голосов
/ 13 марта 2012

В первую очередь Apple пытается помочь вам отделить синхронизацию от частоты кадров. Если вашей игре всегда удается нарисовать фрейм за время, отведенное для одного фрейма, эти два шага произойдут в режиме ожидания. Но даже если на экране появляется много объектов и частота кадров немного снижается, вы все равно будете получать такое же количество обновлений в секунду, поэтому объекты будут двигаться с той же скоростью.

Во-вторых, они помогают вам разделить ваш код на модель-представление-контроллер. Как ваши объекты представлены должны быть отделены от того, как они действуют.

Таким образом, ваше обновление должно прогрессировать независимо от того, что вызывает анимацию, ваше рисование должно отображать текущее состояние.

...