Итак, я пытаюсь создать простой многопоточный игровой движок для игры, которую я хочу написать. До сих пор все работало без проблем, я даже знаю, какие шаги я должен предпринять, чтобы закончить это.
Есть только одна вещь, которую я не знаю (ну, технически, я знаю решение для нее, но я надеюсь, что есть что-то более элегантное и более быстрое): в основном, у меня есть отдельная нить для каждой части мой движок - графика, ввод, физика, аудио и т. д.
Физический поток имеет законченную структуру узла мира, в которой он симулирует все. Однако теперь я должен передать эту структуру моему графическому потоку с наименьшими возможными издержками. В идеале он должен передавать только те части, которые были изменены с момента последнего обновления.
У меня есть компоненты для передачи этих данных, только проблема заключается в их генерации.
До сих пор я думал о двух разных подходах:
- копировать всю структуру для каждого обновления - очень просто, но, возможно, время и память увеличиваются (у меня нет опыта работы с большими движками - это будет жизнеспособно?)
- Отслеживайте, какие части сцены были изменены, помечая узлы сцены некоторыми флагами, а затем копируя только измененные части
При первом подходе будет скопирован большой объем памяти, но без большой вычислительной мощности, при втором подходе будет наоборот: много вычислительной мощности, меньше копируемой памяти.
Есть ли общий ответ, какой подход был бы быстрее в типичной игровой среде?