Как безопасно отделить рендеринг от обновления модели?
Разговаривая с некоторыми разработчиками игр, они предположили, что эффективный игровой движок на базе OpenGL ES не обрабатывает все в основном потоке. Это позволяет игровому движку работать лучше на устройствах с несколькими ядрами процессора.
Они сказали, что я могу отделить обновления от рендеринга. Так что, если я правильно понял, цикл запуска игрового движка может работать так:
Установите CADisplayLink, который вызываетrender
метод.
render
Метод отображает текущую модель мира в фоновом режиме.
render
Затем метод вызываетupdate
метод в основной теме.
Поэтому, пока он рендерится в фоновом режиме, он может одновременно обновлять модель мира для следующей итерации.
Для меня все это очень отвратительно. Может кто-нибудь объяснить или дать ссылку на то, как этот параллельный рендеринг + обновление модели осуществляется в реальности? Мне непонятно, как это не приведет к проблемам, потому что, если обновление модели занимает больше времени, чем рендеринг, или наоборот. Кто что ждет и когда.
Я пытаюсь понять, как это реализовано как теоретически с точки зрения высокого уровня, так и подробно.