From 0ad73bb9655f04afb5ad56174d8fb416cded3e4c Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 28 Apr 2022 08:39:30 -0500 Subject: Geometry Nodes: Add default attribute name to field inputs/outputs Geometry node group inputs and outputs get a new property that controls the attribute name used for that field input/output when assigning the node group to a modifier for the first time. If the default name is assigned to an input, the default "Use attribute name" is true . In order to properly detect when a node group is first assigned, the modifier now clears its properties when clearing the node group. Ref T96707 Differential Revision: https://developer.blender.org/D14761 --- source/blender/blenkernel/intern/node.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 4acccca322a..d3f61d381f2 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -487,6 +487,9 @@ static void write_node_socket(BlendWriter *writer, bNodeSocket *sock) IDP_BlendWrite(writer, sock->prop); } + /* This property should only be used for group node "interface" sockets. */ + BLI_assert(sock->default_attribute_name == nullptr); + write_node_socket_default_value(writer, sock); } static void write_node_socket_interface(BlendWriter *writer, bNodeSocket *sock) @@ -497,6 +500,8 @@ static void write_node_socket_interface(BlendWriter *writer, bNodeSocket *sock) IDP_BlendWrite(writer, sock->prop); } + BLO_write_string(writer, sock->default_attribute_name); + write_node_socket_default_value(writer, sock); } @@ -650,6 +655,7 @@ static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock) sock->typeinfo = nullptr; BLO_read_data_address(reader, &sock->storage); BLO_read_data_address(reader, &sock->default_value); + BLO_read_data_address(reader, &sock->default_attribute_name); sock->total_inputs = 0; /* Clear runtime data set before drawing. */ sock->cache = nullptr; sock->declaration = nullptr; @@ -2161,6 +2167,9 @@ static void node_socket_copy(bNodeSocket *sock_dst, const bNodeSocket *sock_src, } } + sock_dst->default_attribute_name = static_cast( + MEM_dupallocN(sock_src->default_attribute_name)); + sock_dst->stack_index = 0; /* XXX some compositor nodes (e.g. image, render layers) still store * some persistent buffer data here, need to clear this to avoid dangling pointers. */ -- cgit v1.2.3