diff --git a/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp b/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp index bedbfc72722..33a5cafebbe 100644 --- a/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp +++ b/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp @@ -49,7 +49,8 @@ void ExecutionSystemHelper::addbNodeTree(ExecutionSystem &system, int nodes_star /* add all nodes of the tree to the node list */ bNode *node = (bNode *)tree->nodes.first; while (node != NULL) { - addNode(nodes, node, isActiveGroup, system.getContext().isFastCalculation()); + Node *nnode = addNode(nodes, node, isActiveGroup, system.getContext().isFastCalculation()); + nnode->setbNodeGroup(groupnode); node = (bNode *)node->next; } diff --git a/source/blender/compositor/intern/COM_Node.h b/source/blender/compositor/intern/COM_Node.h index bfccd069ad1..e8fd936e749 100644 --- a/source/blender/compositor/intern/COM_Node.h +++ b/source/blender/compositor/intern/COM_Node.h @@ -53,6 +53,12 @@ private: * @brief Is this node part of the active group */ bool m_inActiveGroup; + + /** + * @brief The group node this node belongs to. + * @note: used to find the links in the current subtree for muting nodes + */ + bNode* m_bNodeGroup; public: Node(bNode *editorNode, bool create_sockets = true); @@ -134,6 +140,9 @@ public: * @param socket */ OutputSocket *findOutputSocketBybNodeSocket(bNodeSocket *socket); + + inline void setbNodeGroup(bNode* group) {this->m_bNodeGroup = group;} + inline bNode* getbNodeGroup() {return this->m_bNodeGroup;} protected: void addPreviewOperation(ExecutionSystem *system, CompositorContext *context, InputSocket *inputSocket); void addPreviewOperation(ExecutionSystem *system, CompositorContext *context, OutputSocket *outputSocket); diff --git a/source/blender/compositor/nodes/COM_MuteNode.cpp b/source/blender/compositor/nodes/COM_MuteNode.cpp index eb2da147eca..ebee1f25455 100644 --- a/source/blender/compositor/nodes/COM_MuteNode.cpp +++ b/source/blender/compositor/nodes/COM_MuteNode.cpp @@ -111,11 +111,17 @@ void MuteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *co if ((editorNode->flag & NODE_MUTED) && editorNode->typeinfo->internal_connect) { vector &inputsockets = this->getInputSockets(); vector relinkedsockets; - bNodeTree *editorTree = (bNodeTree *) context->getbNodeTree(); + bNodeTree *editorTree; SocketMap socketMap; ListBase intlinks; bNodeLink *link; + if (this->getbNodeGroup()) { + editorTree = (bNodeTree *) getbNodeGroup()->id; + } else { + editorTree = (bNodeTree *) context->getbNodeTree(); + } + intlinks = editorNode->typeinfo->internal_connect(editorTree, editorNode); this->fillSocketMap(outputsockets, socketMap);