Замеры генерации показывают, что сам наш генератор отрабатывает очень быстро.
И вся проблема начинается именно тогда, когда сгенерённый кусок отправляется в движок на сохранение (voxel_manipulator:write_to_map(data)).
Именоо на это уходит подавляющее большишство времени.
Судя по всему, это происходит потому, что во время генерации на стороне Lua, в этот генерящийся чанк идут изменения на стороне C++, соответствено движку в момент сохранения приходится мерджить все эти кусочки и как-то резолвить конфликты, на что и уходит огромное количество времени.
Откуда изменения, если он только-только генериться ?
Ребята из lott, сами подложили себе свинью (ну и нам заодно), но всё равно им спасибо за такой интересный прототип игры.
Дело вот в чём: сам генератор внутри вызывает множество minetest.add_node() (например, при генерации деревьев), что уходит на сторону плюсов и изменяет чанк прямо во время генерации на стороне Lua.
Задача:
Вычистить все подобнве обращения и использовать для записи только массивы, полученные от движка через voxel_manipulator:get_data(), voxel_manipulator:get_param2_data() или voxel_manipulator:get_light_data()
Замеры генерации показывают, что сам наш генератор отрабатывает очень быстро. И вся проблема начинается именно тогда, когда сгенерённый кусок отправляется в движок на сохранение (
voxel_manipulator:write_to_map(data)
). Именоо на это уходит подавляющее большишство времени.Судя по всему, это происходит потому, что во время генерации на стороне Lua, в этот генерящийся чанк идут изменения на стороне C++, соответствено движку в момент сохранения приходится мерджить все эти кусочки и как-то резолвить конфликты, на что и уходит огромное количество времени.
Откуда изменения, если он только-только генериться ? Ребята из lott, сами подложили себе свинью (ну и нам заодно), но всё равно им спасибо за такой интересный прототип игры. Дело вот в чём: сам генератор внутри вызывает множество
minetest.add_node()
(например, при генерации деревьев), что уходит на сторону плюсов и изменяет чанк прямо во время генерации на стороне Lua.Задача: Вычистить все подобнве обращения и использовать для записи только массивы, полученные от движка через
voxel_manipulator:get_data()
,voxel_manipulator:get_param2_data()
илиvoxel_manipulator:get_light_data()
Blocked by:
661
#1238#15051237
Attention: !! low-priority !!