[Bf-blender-cvs] [468f43c7a6e] geometry-nodes-simulation: Fix simulation
Hans Goudey
noreply at git.blender.org
Wed Dec 14 23:42:53 CET 2022
Commit: 468f43c7a6e96ba55d72564a8f11d60fc8984d33
Author: Hans Goudey
Date: Wed Dec 14 16:42:48 2022 -0600
Branches: geometry-nodes-simulation
https://developer.blender.org/rB468f43c7a6e96ba55d72564a8f11d60fc8984d33
Fix simulation
===================================================================
M source/blender/blenkernel/intern/node.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/nodes/NOD_node_declaration.hh
M source/blender/nodes/geometry/nodes/node_geo_simulation_input.cc
M source/blender/nodes/geometry/nodes/node_geo_simulation_output.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index e52f8fe2f1e..3e350fbb80a 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -1124,12 +1124,12 @@ static void node_init(const bContext *C, bNodeTree *ntree, bNode *node)
BLI_strncpy(node->name, DATA_(ntype->ui_name), NODE_MAXSTR);
nodeUniqueName(ntree, node);
- node_add_sockets_from_type(ntree, node, ntype);
-
if (ntype->initfunc != nullptr) {
ntype->initfunc(ntree, node);
}
+ node_add_sockets_from_type(ntree, node, ntype);
+
if (ntree->typeinfo && ntree->typeinfo->node_add_init) {
ntree->typeinfo->node_add_init(ntree, node);
}
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index ba2d63644ef..eaf0ea9e6ba 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1594,7 +1594,7 @@ typedef struct NodeGeometrySimulationOutput {
int state_items_num;
int8_t use_persistent_cache;
- int _pad[3];
+ char _pad[3];
} NodeGeometrySimulationOutput;
typedef struct NodeGeometryDistributePointsInVolume {
diff --git a/source/blender/nodes/NOD_node_declaration.hh b/source/blender/nodes/NOD_node_declaration.hh
index 9c5362a64bc..c28f7525245 100644
--- a/source/blender/nodes/NOD_node_declaration.hh
+++ b/source/blender/nodes/NOD_node_declaration.hh
@@ -527,7 +527,7 @@ inline NodeDeclarationBuilder::NodeDeclarationBuilder(NodeDeclaration &declarati
inline NodeDeclarationBuilder::NodeDeclarationBuilder(const bNode &node,
NodeDeclaration &declaration)
- : node_(&node), declaration_(declaration)
+ : declaration_(declaration), node_(&node)
{
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_simulation_input.cc b/source/blender/nodes/geometry/nodes/node_geo_simulation_input.cc
index aa543be2f40..4a785d9fae8 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_simulation_input.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_simulation_input.cc
@@ -22,6 +22,8 @@ static void node_declare(NodeDeclarationBuilder &b)
const bNode &node = b.node();
const NodeGeometrySimulationInput &storage = node_storage(node);
const int32_t sim_output_node_id = storage.output_node_id;
+ /* TODO: Add node tree and ndoe as arguments to new dynamic declaration function. */
+ node.owner_tree().ensure_topology_cache();
const bNode *sim_output_node = node.owner_tree().node_by_id(sim_output_node_id);
if (!sim_output_node) {
return;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_simulation_output.cc b/source/blender/nodes/geometry/nodes/node_geo_simulation_output.cc
index 83db79cdcf3..ab330ee65c4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_simulation_output.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_simulation_output.cc
@@ -58,28 +58,35 @@ static void node_declare(NodeDeclarationBuilder &b)
static void node_init(bNodeTree * /*tree*/, bNode *node)
{
- NodeGeometrySimulationOutput *data = MEM_cnew<NodeGeometrySimulationOutput>(__func__);
- data->state_items = MEM_cnew_array<SimulationStateItem>(1, __func__);
- data->state_items[0].name = BLI_strdup(DATA_("Geometry"));
- data->state_items[0].data_type = SOCK_GEOMETRY;
- data->state_items_num = 1;
- data->use_persistent_cache = false;
- node->storage = data;
+ NodeGeometrySimulationOutput *storage = MEM_cnew<NodeGeometrySimulationOutput>(__func__);
+ storage->state_items = MEM_cnew_array<SimulationStateItem>(1, __func__);
+ storage->state_items[0].name = BLI_strdup(DATA_("Geometry"));
+ storage->state_items[0].data_type = SOCK_GEOMETRY;
+ storage->state_items_num = 1;
+ storage->use_persistent_cache = false;
+ node->storage = storage;
}
static void node_free_storage(bNode *node)
{
NodeGeometrySimulationOutput &storage = node_storage(*node);
+ for (SimulationStateItem &item : MutableSpan(storage.state_items, storage.state_items_num)) {
+ MEM_SAFE_FREE(item.name);
+ }
MEM_SAFE_FREE(storage.state_items);
}
-void node_copy_storage(bNodeTree * /*dest_ntree*/, bNode *dst_node, const bNode *src_node)
+static void node_copy_storage(bNodeTree * /*dest_ntree*/, bNode *dst_node, const bNode *src_node)
{
const NodeGeometrySimulationOutput &src = node_storage(*src_node);
- NodeGeometrySimulationOutput &dst = node_storage(*dst_node);
- MEM_SAFE_FREE(dst.state_items);
- dst.state_items = MEM_cnew_array<SimulationStateItem>(src.state_items_num, __func__);
- dst.state_items_num = src.state_items_num;
+ NodeGeometrySimulationOutput *dst = MEM_cnew<NodeGeometrySimulationOutput>(__func__);
+ MEM_SAFE_FREE(dst->state_items);
+ dst->state_items = MEM_cnew_array<SimulationStateItem>(src.state_items_num, __func__);
+ dst->state_items_num = src.state_items_num;
+ for (const int i : IndexRange(dst->state_items_num)) {
+ dst->state_items[i].name = static_cast<char *>(MEM_dupallocN(src.state_items[i].name));
+ }
+ dst_node->storage = dst;
}
static void node_geo_exec(GeoNodeExecParams params)
More information about the Bf-blender-cvs
mailing list