diff options
author | Hans Goudey <h.goudey@me.com> | 2022-04-28 16:39:30 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-04-28 16:39:30 +0300 |
commit | 0ad73bb9655f04afb5ad56174d8fb416cded3e4c (patch) | |
tree | e427b3514ee5165843f9a5dc2724d85c92fd215a /source/blender/blenkernel/intern/node.cc | |
parent | b0e47ffdcf13cd00c42e6cab4c3556679ad9fea4 (diff) |
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
Diffstat (limited to 'source/blender/blenkernel/intern/node.cc')
-rw-r--r-- | source/blender/blenkernel/intern/node.cc | 9 |
1 files changed, 9 insertions, 0 deletions
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<char *>( + 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. */ |