diff options
Diffstat (limited to 'source/blender/compositor/nodes/COM_OutputFileNode.cc')
-rw-r--r-- | source/blender/compositor/nodes/COM_OutputFileNode.cc | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/source/blender/compositor/nodes/COM_OutputFileNode.cc b/source/blender/compositor/nodes/COM_OutputFileNode.cc index 10f176d71f5..e5b9cfb8cc2 100644 --- a/source/blender/compositor/nodes/COM_OutputFileNode.cc +++ b/source/blender/compositor/nodes/COM_OutputFileNode.cc @@ -18,7 +18,6 @@ #include "COM_OutputFileNode.h" #include "COM_ExecutionSystem.h" -#include "COM_OutputFileMultiViewOperation.h" #include "COM_OutputFileOperation.h" #include "BKE_scene.h" @@ -32,6 +31,31 @@ OutputFileNode::OutputFileNode(bNode *editorNode) : Node(editorNode) /* pass */ } +void OutputFileNode::add_input_sockets(OutputOpenExrMultiLayerOperation &operation) const +{ + for (NodeInput *input : inputs) { + NodeImageMultiFileSocket *sockdata = + (NodeImageMultiFileSocket *)input->getbNodeSocket()->storage; + /* note: layer becomes an empty placeholder if the input is not linked */ + operation.add_layer(sockdata->layer, input->getDataType(), input->isLinked()); + } +} + +void OutputFileNode::map_input_sockets(NodeConverter &converter, + OutputOpenExrMultiLayerOperation &operation) const +{ + bool previewAdded = false; + int index = 0; + for (NodeInput *input : inputs) { + converter.mapInputSocket(input, operation.getInputSocket(index++)); + + if (!previewAdded) { + converter.addNodeInputPreview(input); + previewAdded = true; + } + } +} + void OutputFileNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const { @@ -71,22 +95,11 @@ void OutputFileNode::convertToOperations(NodeConverter &converter, } converter.addOperation(outputOperation); - bool previewAdded = false; - int index = 0; - for (NodeInput *input : inputs) { - NodeImageMultiFileSocket *sockdata = - (NodeImageMultiFileSocket *)input->getbNodeSocket()->storage; - - /* note: layer becomes an empty placeholder if the input is not linked */ - outputOperation->add_layer(sockdata->layer, input->getDataType(), input->isLinked()); - - converter.mapInputSocket(input, outputOperation->getInputSocket(index++)); - - if (!previewAdded) { - converter.addNodeInputPreview(input); - previewAdded = true; - } - } + /* First add all inputs. Inputs are stored in a Vector and can be moved to a different + * memory address during this time.*/ + add_input_sockets(*outputOperation); + /* After adding the sockets the memory addresses will stick. */ + map_input_sockets(converter, *outputOperation); } else { /* single layer format */ bool previewAdded = false; |