diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-12-01 12:47:39 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-12-01 12:47:39 +0400 |
commit | ee08c27f95908f33a3ed4f97d1d147ca80922b65 (patch) | |
tree | e7f433d8dc9892c3ff72b076bf2bf2d9170fe7f8 /source/blender/compositor/intern | |
parent | 0da227cac105ef29ac431788a0bd33cb755013cc (diff) |
fix [#33368] Crash with multilayer exr node
Diffstat (limited to 'source/blender/compositor/intern')
-rw-r--r-- | source/blender/compositor/intern/COM_Node.cpp | 20 | ||||
-rw-r--r-- | source/blender/compositor/intern/COM_Node.h | 4 |
2 files changed, 18 insertions, 6 deletions
diff --git a/source/blender/compositor/intern/COM_Node.cpp b/source/blender/compositor/intern/COM_Node.cpp index 300d7ef1952..d49bb5f96fb 100644 --- a/source/blender/compositor/intern/COM_Node.cpp +++ b/source/blender/compositor/intern/COM_Node.cpp @@ -137,18 +137,26 @@ void Node::addSetVectorOperation(ExecutionSystem *graph, InputSocket *inputsocke graph->addOperation(operation); } -/* when a node has no valid data (missing image or group pointer) */ +NodeOperation *Node::convertToOperations_invalid_index(ExecutionSystem *graph, int index) +{ + const float warning_color[4] = {1.0f, 0.0f, 1.0f, 1.0f}; + SetColorOperation *operation = new SetColorOperation(); + operation->setChannels(warning_color); + + /* link the operation */ + this->getOutputSocket(index)->relinkConnections(operation->getOutputSocket()); + graph->addOperation(operation); + return operation; +} + +/* when a node has no valid data (missing image / group pointer, or missing renderlayer from EXR) */ void Node::convertToOperations_invalid(ExecutionSystem *graph, CompositorContext *context) { /* this is a really bad situation - bring on the pink! - so artists know this is bad */ - const float warning_color[4] = {1.0f, 0.0f, 1.0f, 1.0f}; int index; vector<OutputSocket *> &outputsockets = this->getOutputSockets(); for (index = 0; index < outputsockets.size(); index++) { - SetColorOperation *operation = new SetColorOperation(); - this->getOutputSocket(index)->relinkConnections(operation->getOutputSocket()); - operation->setChannels(warning_color); - graph->addOperation(operation); + convertToOperations_invalid_index(graph, index); } } diff --git a/source/blender/compositor/intern/COM_Node.h b/source/blender/compositor/intern/COM_Node.h index 468a95ed434..c098d6da32b 100644 --- a/source/blender/compositor/intern/COM_Node.h +++ b/source/blender/compositor/intern/COM_Node.h @@ -106,6 +106,10 @@ public: void addSetVectorOperation(ExecutionSystem *graph, InputSocket *inputsocket, int editorNodeInputSocketIndex); /** + * Create dummy warning operation, use when we can't get the source data. + */ + NodeOperation *convertToOperations_invalid_index(ExecutionSystem *graph, int index); + /** * when a node has no valid data (missing image or a group nodes ID pointer is NULL) * call this function from #convertToOperations, this way the node sockets are converted * into valid outputs, without this the compositor system gets confused and crashes, see [#32490] |