[Bf-blender-cvs] [5a5f5a1350d] temp-geometry-nodes-expandable-geometry-socket-prototype: initial geometry expander node storage
Jacques Lucke
noreply at git.blender.org
Tue Aug 3 10:50:23 CEST 2021
Commit: 5a5f5a1350dcfe24f22ec1a7869ab9b82d192596
Author: Jacques Lucke
Date: Mon Aug 2 16:37:22 2021 +0200
Branches: temp-geometry-nodes-expandable-geometry-socket-prototype
https://developer.blender.org/rB5a5f5a1350dcfe24f22ec1a7869ab9b82d192596
initial geometry expander node storage
===================================================================
M source/blender/blenkernel/intern/node.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 1a79ef41a7e..9840a30dd07 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -572,6 +572,15 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree)
}
BLO_write_struct_by_name(writer, node->typeinfo->storagename, storage);
}
+ else if (node->type == GEO_NODE_GEOMETRY_EXPANDER) {
+ NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)node->storage;
+ BLO_write_struct(writer, NodeGeometryGeometryExpander, storage);
+ BLO_write_struct_list(writer, GeometryExpanderOutput, &storage->outputs);
+ LISTBASE_FOREACH (const GeometryExpanderOutput *, expander_output, &storage->outputs) {
+ BLO_write_string(writer, expander_output->data_identifier);
+ BLO_write_string(writer, expander_output->socket_identifier);
+ }
+ }
else if (node->typeinfo != &NodeTypeUndefined) {
BLO_write_struct_by_name(writer, node->typeinfo->storagename, node->storage);
}
@@ -751,6 +760,15 @@ void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
BLO_read_data_address(reader, &storage->string);
break;
}
+ case GEO_NODE_GEOMETRY_EXPANDER: {
+ NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)node->storage;
+ BLO_read_list(reader, &storage->outputs);
+ LISTBASE_FOREACH (GeometryExpanderOutput *, expander_output, &storage->outputs) {
+ BLO_read_data_address(reader, &expander_output->socket_identifier);
+ BLO_read_data_address(reader, &expander_output->data_identifier);
+ }
+ break;
+ }
default:
break;
}
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 5152098f57a..d2bc3d3eb06 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1418,6 +1418,18 @@ typedef struct NodeGeometryRaycast {
char _pad[1];
} NodeGeometryRaycast;
+typedef struct GeometryExpanderOutput {
+ int8_t domain;
+ int8_t component_type;
+ char _pad[6];
+ char *data_identifier;
+ char *socket_identifier;
+} GeometryExpanderOutput;
+
+typedef struct NodeGeometryGeometryExpander {
+ ListBase outputs;
+} NodeGeometryExpander;
+
/* script node mode */
#define NODE_SCRIPT_INTERNAL 0
#define NODE_SCRIPT_EXTERNAL 1
diff --git a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
index 588b6d0a75c..d9a048ae218 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
@@ -31,9 +31,52 @@ static bNodeSocketTemplate geo_node_geometry_expander_in[] = {
namespace blender::nodes {
+static void geo_node_geometry_expander_layout(uiLayout *UNUSED(layout),
+ bContext *UNUSED(C),
+ PointerRNA *UNUSED(ptr))
+{
+}
+
static void geo_node_geometry_expander_exec(GeoNodeExecParams params)
{
- UNUSED_VARS(params);
+ NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)params.node().storage;
+ UNUSED_VARS(storage);
+}
+
+static void geo_node_geometry_expander_init(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)MEM_callocN(
+ sizeof(NodeGeometryGeometryExpander), __func__);
+ node->storage = storage;
+}
+
+static void geo_node_geometry_expander_storage_free(bNode *node)
+{
+ NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)node->storage;
+ LISTBASE_FOREACH_MUTABLE (GeometryExpanderOutput *, expander_output, &storage->outputs) {
+ MEM_freeN(expander_output->data_identifier);
+ MEM_freeN(expander_output->socket_identifier);
+ MEM_freeN(expander_output);
+ }
+ MEM_freeN(storage);
+}
+
+static void geo_node_geometry_expander_storage_copy(bNodeTree *UNUSED(dest_ntree),
+ bNode *dst_node,
+ const bNode *src_node)
+{
+ NodeGeometryGeometryExpander *src_storage = (NodeGeometryGeometryExpander *)src_node->storage;
+ NodeGeometryGeometryExpander *dst_storage = (NodeGeometryGeometryExpander *)MEM_callocN(
+ sizeof(NodeGeometryGeometryExpander), __func__);
+ LISTBASE_FOREACH (GeometryExpanderOutput *, src_output, &src_storage->outputs) {
+ GeometryExpanderOutput *dst_output = (GeometryExpanderOutput *)MEM_callocN(
+ sizeof(GeometryExpanderOutput), __func__);
+ *dst_output = *src_output;
+ dst_output->data_identifier = (char *)MEM_dupallocN(src_output->data_identifier);
+ dst_output->socket_identifier = (char *)MEM_dupallocN(src_output->socket_identifier);
+ BLI_addtail(&dst_storage->outputs, src_output);
+ }
+ dst_node->storage = dst_storage;
}
} // namespace blender::nodes
@@ -45,6 +88,12 @@ void register_node_type_geo_geometry_expander()
geo_node_type_base(
&ntype, GEO_NODE_GEOMETRY_EXPANDER, "Geometry Expander", NODE_CLASS_GEOMETRY, 0);
node_type_socket_templates(&ntype, geo_node_geometry_expander_in, nullptr);
+ node_type_init(&ntype, blender::nodes::geo_node_geometry_expander_init);
+ node_type_storage(&ntype,
+ "NodeGeometryGeometryExpander",
+ blender::nodes::geo_node_geometry_expander_storage_free,
+ blender::nodes::geo_node_geometry_expander_storage_copy);
ntype.geometry_node_execute = blender::nodes::geo_node_geometry_expander_exec;
+ ntype.draw_buttons = blender::nodes::geo_node_geometry_expander_layout;
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list