diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2022-05-01 11:27:22 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2022-05-01 11:27:22 +0300 |
commit | df0616bcd0c3d2a020a36c573b4df49c9947c949 (patch) | |
tree | bb0ce40b3fa6c836518e495e4dcdeda32d30252d /source/blender/blenkernel/intern/node.cc | |
parent | 171851a6c87469f27d7f4766fbb62c54c5d05e7d (diff) |
Nodes: Fix T90233
- Fix default_value initialization of custom node tree interface:
This was crashing when adding a custom interface socket to a tree.
The node_socket_set_typeinfo function was called too early, creating a
default float socket, which then doesn't match the socket type after
changing to the custom type.
The node_socket_set_typeinfo only allocates and initializes
default_value when it isn't already set. That is because the function is
used either when creating new sockets or to initialize typeinfo after
loading files. So default_value has to be either null or has to be
matching the current type already.
- Fix RNA flag for string return value of the valid_socket_type callback:
String return values of registerable RNA functions need a
PROP_THICK_WRAP flag since they don't have a fixed buffer to write into.
Diffstat (limited to 'source/blender/blenkernel/intern/node.cc')
-rw-r--r-- | source/blender/blenkernel/intern/node.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index d3f61d381f2..200eefb73ec 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -1165,6 +1165,9 @@ static void node_set_typeinfo(const struct bContext *C, } } +/* Warning: default_value must either be null or match the typeinfo at this point. + * This function is called both for initializing new sockets and after loading files. + */ static void node_socket_set_typeinfo(bNodeTree *ntree, bNodeSocket *sock, bNodeSocketType *typeinfo) @@ -3286,9 +3289,9 @@ static bNodeSocket *make_socket_interface(bNodeTree *ntree, bNodeSocket *sock = MEM_cnew<bNodeSocket>("socket template"); BLI_strncpy(sock->idname, stype->idname, sizeof(sock->idname)); - node_socket_set_typeinfo(ntree, sock, stype); sock->in_out = in_out; sock->type = SOCK_CUSTOM; /* int type undefined by default */ + node_socket_set_typeinfo(ntree, sock, stype); /* assign new unique index */ const int own_index = ntree->cur_index++; |