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.
This commit is contained in:
parent
171851a6c8
commit
df0616bcd0
Notes:
blender-bot
2023-02-14 06:00:51 +01:00
Referenced by issue #90233, Crash choosing interface socket type of custom tree
|
@ -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++;
|
||||
|
|
|
@ -12441,7 +12441,7 @@ static void rna_def_nodetree(BlenderRNA *brna)
|
|||
RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
|
||||
parm = RNA_def_string(
|
||||
func, "idname", "NodeSocket", MAX_NAME, "Socket Type", "Identifier of the socket type");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL | PROP_THICK_WRAP, PARM_REQUIRED);
|
||||
RNA_def_function_return(func, RNA_def_boolean(func, "valid", false, "", ""));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue