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:
authorLukas Tönne <lukas.toenne@gmail.com>2014-07-08 14:48:41 +0400
committerLukas Tönne <lukas.toenne@gmail.com>2014-07-08 14:51:35 +0400
commita5902fb276933278bd8db86a9b1938fe649662d8 (patch)
tree95d9d8999427ec2b52d59975c5ac8e171c628d8b /source/blender/compositor/nodes/COM_ViewerNode.cpp
parentbd7fbd43273b63655886b60b7bba7c36e6a9755a (diff)
Fix T40986: crash on using the viewer node inside of group nodes.
Viewers were activated both inside the active group as well as the top level tree (the latter being a quick fix for getting a fallback viewer). This caused a race condition on the shared viewer image. Now the active viewer is defined at node conversion time in the converter so that only one can be active at a time without each node having to follow complicated rules for exclusion.
Diffstat (limited to 'source/blender/compositor/nodes/COM_ViewerNode.cpp')
-rw-r--r--source/blender/compositor/nodes/COM_ViewerNode.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/source/blender/compositor/nodes/COM_ViewerNode.cpp b/source/blender/compositor/nodes/COM_ViewerNode.cpp
index 09a3cea2da1..07aa960c4d9 100644
--- a/source/blender/compositor/nodes/COM_ViewerNode.cpp
+++ b/source/blender/compositor/nodes/COM_ViewerNode.cpp
@@ -34,8 +34,7 @@ ViewerNode::ViewerNode(bNode *editorNode) : Node(editorNode)
void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const
{
bNode *editorNode = this->getbNode();
- bool is_active = (editorNode->flag & NODE_DO_OUTPUT_RECALC || context.isRendering()) &&
- ((editorNode->flag & NODE_DO_OUTPUT) && this->isInActiveGroup());
+ bool do_output = (editorNode->flag & NODE_DO_OUTPUT_RECALC || context.isRendering()) && (editorNode->flag & NODE_DO_OUTPUT);
bool ignore_alpha = editorNode->custom2 & CMP_NODE_OUTPUT_IGNORE_ALPHA;
NodeInput *imageSocket = this->getInputSocket(0);
@@ -47,7 +46,6 @@ void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorC
viewerOperation->setbNodeTree(context.getbNodeTree());
viewerOperation->setImage(image);
viewerOperation->setImageUser(imageUser);
- viewerOperation->setActive(is_active);
viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
viewerOperation->setCenterX(editorNode->custom3);
viewerOperation->setCenterY(editorNode->custom4);
@@ -74,4 +72,7 @@ void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorC
converter.mapInputSocket(depthSocket, viewerOperation->getInputSocket(2));
converter.addNodeInputPreview(imageSocket);
+
+ if (do_output)
+ converter.registerViewer(viewerOperation);
}