Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/startup/nodeitems_builtins.py2
-rw-r--r--source/blender/blenloader/intern/versioning_300.c10
-rw-r--r--source/blender/makesdna/DNA_node_types.h5
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c16
-rw-r--r--source/blender/nodes/intern/node_common.c26
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)