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:
authorAlexander Gavrilov <angavrilov@gmail.com>2020-08-01 19:56:53 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-08-05 20:20:48 +0300
commita316d3b6c660a5ae9fbcae1f1403dad4686c8ecf (patch)
treec7a54fb052bc9d929eacfb7f7690da4eb7cd0132 /source/blender/nodes
parentd84dce85f300a360036129cc8921bc21074e20f6 (diff)
Eevee: do not rely on the SOCK_HIDE_VALUE flag for node group sockets.
When disconnecting links for defaulted node group inputs, recurse into the nested node group nodes, instead of checking the socket flag. Otherwise the behavior is confusing and differs from Cycles. Differential Revision: https://developer.blender.org/D8455
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 179a92ec7bd..758f7edfe49 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -344,15 +344,23 @@ static void ntree_shader_unlink_hidden_value_sockets(bNode *group_node, bNodeSoc
bool removed_link = false;
for (node = group_ntree->nodes.first; node; node = node->next) {
+ const bool is_group = ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && (node->id != NULL);
+
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
- if ((sock->flag & SOCK_HIDE_VALUE) == 0) {
+ if (!is_group && (sock->flag & SOCK_HIDE_VALUE) == 0) {
continue;
}
/* If socket is linked to a group input node and sockets id match. */
if (sock && sock->link && sock->link->fromnode->type == NODE_GROUP_INPUT) {
if (STREQ(isock->identifier, sock->link->fromsock->identifier)) {
- nodeRemLink(group_ntree, sock->link);
- removed_link = true;
+ if (is_group) {
+ /* Recursively unlink sockets within the nested group. */
+ ntree_shader_unlink_hidden_value_sockets(node, sock);
+ }
+ else {
+ nodeRemLink(group_ntree, sock->link);
+ removed_link = true;
+ }
}
}
}