Simulation Nodes: bake simulation states to disk #106937
|
@ -32,8 +32,8 @@ class BDataWriter {
|
|||
|
||||
void serialize_modifier_simulation_state(const ModifierSimulationState &state,
|
||||
BDataWriter &bdata_writer,
|
||||
std::ostream &stream);
|
||||
void deserialize_modifier_simulation_state(std::istream &stream,
|
||||
io::serialize::DictionaryValue &r_io_root);
|
||||
void deserialize_modifier_simulation_state(const io::serialize::DictionaryValue &io_root,
|
||||
const BDataReader &bdata_reader,
|
||||
ModifierSimulationState &r_state);
|
||||
|
||||
|
|
|
@ -569,11 +569,10 @@ static std::shared_ptr<io::serialize::DictionaryValue> serialize_geometry_set(
|
|||
|
||||
void serialize_modifier_simulation_state(const ModifierSimulationState &state,
|
||||
BDataWriter &bdata_writer,
|
||||
std::ostream &stream)
|
||||
io::serialize::DictionaryValue &r_io_root)
|
||||
{
|
||||
io::serialize::DictionaryValue io_root;
|
||||
io_root.append_int("version", 1);
|
||||
auto io_zones = io_root.append_array("zones");
|
||||
r_io_root.append_int("version", 1);
|
||||
auto io_zones = r_io_root.append_array("zones");
|
||||
|
||||
for (const auto item : state.zone_states_.items()) {
|
||||
const SimulationZoneID &zone_id = item.key;
|
||||
|
@ -607,32 +606,21 @@ void serialize_modifier_simulation_state(const ModifierSimulationState &state,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
io::serialize::JsonFormatter json_formatter;
|
||||
json_formatter.serialize(stream, io_root);
|
||||
}
|
||||
|
||||
void deserialize_modifier_simulation_state(std::istream &stream,
|
||||
void deserialize_modifier_simulation_state(const io::serialize::DictionaryValue &io_root,
|
||||
const BDataReader &bdata_reader,
|
||||
ModifierSimulationState &r_state)
|
||||
{
|
||||
io::serialize::JsonFormatter formatter;
|
||||
std::unique_ptr<io::serialize::Value> io_root_value = formatter.deserialize(stream);
|
||||
if (!io_root_value) {
|
||||
return;
|
||||
}
|
||||
const io::serialize::DictionaryValue *io_root = io_root_value->as_dictionary_value();
|
||||
if (!io_root) {
|
||||
return;
|
||||
}
|
||||
const std::optional<int> version = io_root->lookup_int("version");
|
||||
const std::optional<int> version = io_root.lookup_int("version");
|
||||
if (!version) {
|
||||
return;
|
||||
}
|
||||
if (*version != 1) {
|
||||
return;
|
||||
}
|
||||
const io::serialize::ArrayValue *io_zones = io_root->lookup_array("zones");
|
||||
const io::serialize::ArrayValue *io_zones = io_root.lookup_array("zones");
|
||||
if (!io_zones) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -183,7 +183,16 @@ void load_simulation_state(const StringRefNull meta_path,
|
|||
{
|
||||
const MyBDataReader bdata_reader{bdata_dir};
|
||||
fstream meta_file{meta_path.c_str(), std::ios::in};
|
||||
bke::sim::deserialize_modifier_simulation_state(meta_file, bdata_reader, r_state);
|
||||
io::serialize::JsonFormatter formatter;
|
||||
std::shared_ptr<io::serialize::Value> io_root_value = formatter.deserialize(meta_file);
|
||||
if (!io_root_value) {
|
||||
return;
|
||||
}
|
||||
const io::serialize::DictionaryValue *io_root = io_root_value->as_dictionary_value();
|
||||
if (!io_root) {
|
||||
return;
|
||||
}
|
||||
bke::sim::deserialize_modifier_simulation_state(*io_root, bdata_reader, r_state);
|
||||
}
|
||||
|
||||
static bool bake_simulation_poll(bContext *C)
|
||||
|
@ -293,9 +302,13 @@ static int bake_simulation_exec(bContext *C, wmOperator * /*op*/)
|
|||
fstream bdata_file{bdata_path, std::ios::out | std::ios::binary};
|
||||
MyBDataWriter bdata_writer{bdata_file_name, bdata_file, 0, modifier_bake_data.shared_data};
|
||||
|
||||
io::serialize::DictionaryValue io_root;
|
||||
bke::sim::serialize_modifier_simulation_state(*sim_state, bdata_writer, io_root);
|
||||
|
||||
BLI_make_existing_file(meta_path);
|
||||
fstream meta_file{meta_path, std::ios::out};
|
||||
bke::sim::serialize_modifier_simulation_state(*sim_state, bdata_writer, meta_file);
|
||||
io::serialize::JsonFormatter formatter;
|
||||
formatter.serialize(meta_file, io_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue