From 9ccb8b8c408707093fcfd888b0b1e92a83c79727 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 8 Aug 2012 08:15:56 +0000 Subject: Fix crash in cases when render layers node is muted --- source/blender/compositor/nodes/COM_MuteNode.cpp | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'source/blender/compositor') diff --git a/source/blender/compositor/nodes/COM_MuteNode.cpp b/source/blender/compositor/nodes/COM_MuteNode.cpp index 2c96473a556..eb2da147eca 100644 --- a/source/blender/compositor/nodes/COM_MuteNode.cpp +++ b/source/blender/compositor/nodes/COM_MuteNode.cpp @@ -110,6 +110,7 @@ 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(); SocketMap socketMap; ListBase intlinks; @@ -132,10 +133,37 @@ void MuteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *co else { createDefaultOutput(graph, toSocket); } + + relinkedsockets.push_back(toSocket); } } } + /* in some cases node could be marked as muted, but it wouldn't have internal connections + * this happens in such cases as muted render layer node + * + * to deal with such cases create default operation for not-relinked output sockets + */ + + for (unsigned int index = 0; index < outputsockets.size(); index++) { + OutputSocket *output = outputsockets[index]; + + if (output->isConnected()) { + bool relinked = false; + vector::iterator it; + + for (it = relinkedsockets.begin(); it != relinkedsockets.end(); it++) { + if (*it == output) { + relinked = true; + break; + } + } + + if (!relinked) + createDefaultOutput(graph, output); + } + } + BLI_freelistN(&intlinks); } else { -- cgit v1.2.3