diff options
-rw-r--r-- | release/scripts/startup/nodeitems_builtins.py | 2 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_300.c | 10 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_node_types.h | 5 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 16 | ||||
-rw-r--r-- | source/blender/nodes/intern/node_common.c | 26 |
5 files changed, 53 insertions, 6 deletions
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index 9f5bfebb7c1..741f5056e0c 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -136,6 +136,7 @@ def node_group_input_items(context): for i, iosock in enumerate(ntree.inputs): settings = dict() # settings["label"] = string_literal(iosock.name) + settings["use_extension_socket"] = "False" for k, _ in enumerate(ntree.inputs): settings["outputs[{}].hide".format(k)] = "False" if k == i else "True" yield NodeItem("NodeGroupInput", label=iosock.name, settings=settings, poll=group_input_output_item_poll) @@ -154,6 +155,7 @@ def node_group_output_items(context): for i, iosock in enumerate(ntree.outputs): settings = dict() # settings["label"] = string_literal(iosock.name) + settings["use_extension_socket"] = "False" for k, _ in enumerate(ntree.outputs): settings["inputs[{}].hide".format(k)] = "False" if k == i else "True" yield NodeItem("NodeGroupOutput", label=iosock.name, settings=settings, poll=group_input_output_item_poll) diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c index f16b73f3c7b..2b9bd3822c8 100644 --- a/source/blender/blenloader/intern/versioning_300.c +++ b/source/blender/blenloader/intern/versioning_300.c @@ -502,5 +502,15 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain) } } FOREACH_NODETREE_END; + + /* Enable node group extension sockets by default. */ + FOREACH_NODETREE_BEGIN (bmain, ntree, id) { + LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { + if (ELEM(node->type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT)) { + node->custom1 |= NODE_GROUP_USE_EXTENSION_SOCKET; + } + } + } + FOREACH_NODETREE_END; } } diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 1a3415bf74e..047945f4d48 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -616,6 +616,11 @@ typedef struct bNodeSocketValueMaterial { } bNodeSocketValueMaterial; /* Data structs, for node->storage. */ + +typedef enum eNodeGroupInputOutputFlags { + NODE_GROUP_USE_EXTENSION_SOCKET = 1, +} eNodeGroupInputOutputFlags; + enum { CMP_NODE_MASKTYPE_ADD = 0, CMP_NODE_MASKTYPE_SUBTRACT = 1, diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 0afb9da9547..98f548dcb24 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -4668,6 +4668,13 @@ static void def_group_input(StructRNA *srna) RNA_def_property_struct_type(prop, "PropertyGroup"); RNA_def_property_flag(prop, PROP_IDPROPERTY); RNA_def_property_ui_text(prop, "Interface", "Interface socket data"); + + prop = RNA_def_property(srna, "use_extension_socket", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "custom1", NODE_GROUP_USE_EXTENSION_SOCKET); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_ui_text( + prop, "Use Extension Socket", "Add a virtual socket to the node for extending the node group interface"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); } static void def_group_output(StructRNA *srna) @@ -4681,6 +4688,15 @@ static void def_group_output(StructRNA *srna) RNA_def_property_flag(prop, PROP_IDPROPERTY); RNA_def_property_ui_text(prop, "Interface", "Interface socket data"); + prop = RNA_def_property(srna, "use_extension_socket", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "custom1", NODE_GROUP_USE_EXTENSION_SOCKET); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_ui_text( + prop, + "Use Extension Socket", + "Add a virtual socket to the node for extending the node group interface"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); + prop = RNA_def_property(srna, "is_active_output", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_DO_OUTPUT); RNA_def_property_ui_text( diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c index 58a748c7d0e..41e9add2cc8 100644 --- a/source/blender/nodes/intern/node_common.c +++ b/source/blender/nodes/intern/node_common.c @@ -515,19 +515,26 @@ bNodeSocket *node_group_input_find_socket(bNode *node, const char *identifier) static void node_group_input_init(bNodeTree *ntree, bNode *node) { + node->custom1 |= NODE_GROUP_USE_EXTENSION_SOCKET; node_group_input_update(ntree, node); } void node_group_input_update(bNodeTree *ntree, bNode *node) { - node_group_handle_extension(ntree, node, &node->outputs); + const bool use_extension_socket = node->custom1 & NODE_GROUP_USE_EXTENSION_SOCKET; + + if (use_extension_socket) { + node_group_handle_extension(ntree, node, &node->outputs); + } /* Check group tree interface and remove or insert sockets as needed. */ /* SOCK_IN/SOCK_OUT is inverted for interface nodes: Group input nodes have output sockets. */ group_verify_socket_list(ntree, node, &ntree->inputs, &node->outputs, SOCK_OUT); - /* Add virtual extension socket. */ - nodeAddSocket(ntree, node, SOCK_OUT, "NodeSocketVirtual", "__extend__", ""); + if (use_extension_socket) { + /* Add virtual extension socket. */ + nodeAddSocket(ntree, node, SOCK_OUT, "NodeSocketVirtual", "__extend__", ""); + } } void register_node_type_group_input(void) @@ -551,19 +558,26 @@ bNodeSocket *node_group_output_find_socket(bNode *node, const char *identifier) static void node_group_output_init(bNodeTree *ntree, bNode *node) { + node->custom1 |= NODE_GROUP_USE_EXTENSION_SOCKET; node_group_output_update(ntree, node); } void node_group_output_update(bNodeTree *ntree, bNode *node) { - node_group_handle_extension(ntree, node, &node->inputs); + const bool use_extension_socket = node->custom1 & NODE_GROUP_USE_EXTENSION_SOCKET; + + if (use_extension_socket) { + node_group_handle_extension(ntree, node, &node->inputs); + } /* Check group tree interface and remove or insert sockets as needed. */ /* SOCK_IN/SOCK_OUT is inverted for interface nodes: Group output nodes have input sockets. */ group_verify_socket_list(ntree, node, &ntree->outputs, &node->inputs, SOCK_IN); - /* Add virtual extension socket */ - nodeAddSocket(ntree, node, SOCK_IN, "NodeSocketVirtual", "__extend__", ""); + if (use_extension_socket) { + /* Add virtual extension socket */ + nodeAddSocket(ntree, node, SOCK_IN, "NodeSocketVirtual", "__extend__", ""); + } } void register_node_type_group_output(void) |