Geometry Nodes: store bake item names on disk
Bake items are generally identified by their (generated) identifier. This allows changing the name and reordering sockets without breaking baked data. In the future we want to have some kind of Import Bake node that ideally automatically creates its output sockets and names them correctly. For that to work, the baked data has to contain the user-defined names for each socket. Those names are not used yet.
This commit is contained in:
@@ -17,6 +17,12 @@ namespace blender::bke::bake {
|
||||
*/
|
||||
class BakeItem {
|
||||
public:
|
||||
/**
|
||||
* User-defined name. This is not necessarily unique and might change over time. It's purpose is
|
||||
* to make bakes more inspectable.
|
||||
*/
|
||||
std::string name;
|
||||
|
||||
virtual ~BakeItem() = default;
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ struct BakeSocketConfig {
|
||||
* for some socket types).
|
||||
*/
|
||||
Vector<AttrDomain> domains;
|
||||
/** User-defined name of every socket. */
|
||||
Vector<StringRef> names;
|
||||
/**
|
||||
* Determines which geometries a field socket should be evaluated on. This can be used to
|
||||
* implement rules like a field should only be evaluated on the preceding or on all geometries.
|
||||
|
||||
@@ -1010,6 +1010,9 @@ static void serialize_bake_item(const BakeItem &item,
|
||||
BlobSharing &blob_sharing,
|
||||
DictionaryValue &r_io_item)
|
||||
{
|
||||
if (!item.name.empty()) {
|
||||
r_io_item.append_str("name", item.name);
|
||||
}
|
||||
if (const auto *geometry_state_item = dynamic_cast<const GeometryBakeItem *>(&item)) {
|
||||
r_io_item.append_str("type", "GEOMETRY");
|
||||
|
||||
|
||||
@@ -101,6 +101,12 @@ Array<std::unique_ptr<BakeItem>> move_socket_values_to_bake_items(const Span<voi
|
||||
GeometryBakeItem::prepare_geometry_for_bake(geometry, data_block_map);
|
||||
}
|
||||
|
||||
for (const int i : bake_items.index_range()) {
|
||||
if (std::unique_ptr<BakeItem> &item = bake_items[i]) {
|
||||
item->name = config.names[i];
|
||||
}
|
||||
}
|
||||
|
||||
return bake_items;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ static bake::BakeSocketConfig make_bake_socket_config(const Span<NodeGeometryBak
|
||||
bake::BakeSocketConfig config;
|
||||
const int items_num = bake_items.size();
|
||||
config.domains.resize(items_num);
|
||||
config.names.resize(items_num);
|
||||
config.types.resize(items_num);
|
||||
config.geometries_by_attribute.resize(items_num);
|
||||
|
||||
@@ -124,6 +125,7 @@ static bake::BakeSocketConfig make_bake_socket_config(const Span<NodeGeometryBak
|
||||
for (const int item_i : bake_items.index_range()) {
|
||||
const NodeGeometryBakeItem &item = bake_items[item_i];
|
||||
config.types[item_i] = eNodeSocketDatatype(item.socket_type);
|
||||
config.names[item_i] = item.name;
|
||||
config.domains[item_i] = AttrDomain(item.attribute_domain);
|
||||
if (item.socket_type == SOCK_GEOMETRY) {
|
||||
last_geometry_index = item_i;
|
||||
|
||||
@@ -72,6 +72,7 @@ static bke::bake::BakeSocketConfig make_bake_socket_config(
|
||||
bke::bake::BakeSocketConfig config;
|
||||
const int items_num = node_simulation_items.size();
|
||||
config.domains.resize(items_num);
|
||||
config.names.resize(items_num);
|
||||
config.types.resize(items_num);
|
||||
config.geometries_by_attribute.resize(items_num);
|
||||
|
||||
@@ -79,6 +80,7 @@ static bke::bake::BakeSocketConfig make_bake_socket_config(
|
||||
for (const int item_i : node_simulation_items.index_range()) {
|
||||
const NodeSimulationItem &item = node_simulation_items[item_i];
|
||||
config.types[item_i] = eNodeSocketDatatype(item.socket_type);
|
||||
config.names[item_i] = item.name;
|
||||
config.domains[item_i] = AttrDomain(item.attribute_domain);
|
||||
if (item.socket_type == SOCK_GEOMETRY) {
|
||||
last_geometry_index = item_i;
|
||||
|
||||
Reference in New Issue
Block a user