Итак, я пытаюсь создать простой многопоточный игровой движок для игры, которую я хочу написать. Пока все работает без проблем, я даже знаю, какие шаги я должен предпринять, чтобы закончить его.Как сохранить данные моего мира в многопоточном игровом движке?
Есть только одна вещь, которую я не знаю (ну, технически, я знаю решение для нее, но я надеюсь, что есть что-то более элегантное и быстрое): В принципе, у меня есть отдельная нить для каждой части моего двигателя - графика, вход, физика, аудио и т. д.
Физический поток имеет полную структуру узлов сцены мира, где он имитирует все. Тем не менее, теперь я должен передать эту структуру своей графической нити с наименьшими затратами времени. В идеале, он должен передавать только те части, которые были изменены с момента последнего обновления.
У меня есть компоненты для передачи этих данных, только проблема его генерирует.
До сих пор я думал о двух различных подходах:
- скопировать всю структуру для каждого обновления - очень простой, но, возможно, времени и intensife памяти (у меня нет опыта работы с большими двигателями - бы это может быть жизнеспособной?)
- Отслеживайте, какие части сцены изменены путем маркировки узлов сцены с некоторыми флагами, а затем только копирование через измененных частей
подход можно было бы скопировать большой объем памяти, но без большой обработки r, подход два будет делать обратное: много вычислительной мощности, меньше памяти скопированы.
Есть ли какой-то общий ответ, какой подход будет быстрее в типичной игровой среде?
некоторая теория: максимальная скорость передачи данных DDR2-1066 составляет 8533 МБ/с, и я хочу не менее 100 обновлений в секунду, поэтому одно обновление должно быть меньше 85 МБ. Один физический узел должен быть не менее 32 байт (28 для позиции и ориентации не менее 4 для уникального идентификатора), если использовать 32-битные int в качестве идентификаторов. При использовании 10 000 объектов это будет означать 312,5 кБ для копирования на обновление (0,3% от максимального). Однако это не включает накладные расходы для иерархии узлов. Должно быть легко. – Mononofu