diff options
Diffstat (limited to 'source/blender/compositor/nodes/COM_DistanceMatteNode.cpp')
-rw-r--r-- | source/blender/compositor/nodes/COM_DistanceMatteNode.cpp | 83 |
1 files changed, 43 insertions, 40 deletions
diff --git a/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp index 3c532fe0b1d..704c704c500 100644 --- a/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp +++ b/source/blender/compositor/nodes/COM_DistanceMatteNode.cpp @@ -31,55 +31,58 @@ DistanceMatteNode::DistanceMatteNode(bNode *editorNode) : Node(editorNode) /* pass */ } -void DistanceMatteNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context) +void DistanceMatteNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const { - InputSocket *inputSocketImage = this->getInputSocket(0); - InputSocket *inputSocketKey = this->getInputSocket(1); - OutputSocket *outputSocketImage = this->getOutputSocket(0); - OutputSocket *outputSocketMatte = this->getOutputSocket(1); - - NodeOperation *operation; bNode *editorsnode = getbNode(); NodeChroma *storage = (NodeChroma *)editorsnode->storage; - + + NodeInput *inputSocketImage = this->getInputSocket(0); + NodeInput *inputSocketKey = this->getInputSocket(1); + NodeOutput *outputSocketImage = this->getOutputSocket(0); + NodeOutput *outputSocketMatte = this->getOutputSocket(1); + + SetAlphaOperation *operationAlpha = new SetAlphaOperation(); + converter.addOperation(operationAlpha); + /* work in RGB color space */ + NodeOperation *operation; if (storage->channel == 1) { - operation = new DistanceRGBMatteOperation(); - ((DistanceRGBMatteOperation *) operation)->setSettings(storage); - - inputSocketImage->relinkConnections(operation->getInputSocket(0), 0, graph); - inputSocketKey->relinkConnections(operation->getInputSocket(1), 1, graph); + DistanceRGBMatteOperation *matte = new DistanceRGBMatteOperation(); + matte->setSettings(storage); + converter.addOperation(matte); + + converter.mapInputSocket(inputSocketImage, matte->getInputSocket(0)); + converter.mapInputSocket(inputSocketImage, operationAlpha->getInputSocket(0)); + + converter.mapInputSocket(inputSocketKey, matte->getInputSocket(1)); + + operation = matte; } /* work in YCbCr color space */ else { - operation = new DistanceYCCMatteOperation(); - ((DistanceYCCMatteOperation *) operation)->setSettings(storage); - + DistanceYCCMatteOperation *matte = new DistanceYCCMatteOperation(); + matte->setSettings(storage); + converter.addOperation(matte); + ConvertRGBToYCCOperation *operationYCCImage = new ConvertRGBToYCCOperation(); - inputSocketImage->relinkConnections(operationYCCImage->getInputSocket(0), 0, graph); - addLink(graph, operationYCCImage->getOutputSocket(), operation->getInputSocket(0)); - graph->addOperation(operationYCCImage); - ConvertRGBToYCCOperation *operationYCCMatte = new ConvertRGBToYCCOperation(); - inputSocketKey->relinkConnections(operationYCCMatte->getInputSocket(0), 1, graph); - addLink(graph, operationYCCMatte->getOutputSocket(), operation->getInputSocket(1)); - graph->addOperation(operationYCCMatte); - } - - if (outputSocketMatte->isConnected()) { - outputSocketMatte->relinkConnections(operation->getOutputSocket()); - } - - graph->addOperation(operation); - - SetAlphaOperation *operationAlpha = new SetAlphaOperation(); - addLink(graph, operation->getInputSocket(0)->getConnection()->getFromSocket(), operationAlpha->getInputSocket(0)); - addLink(graph, operation->getOutputSocket(), operationAlpha->getInputSocket(1)); - - graph->addOperation(operationAlpha); - addPreviewOperation(graph, context, operationAlpha->getOutputSocket()); - - if (outputSocketImage->isConnected()) { - outputSocketImage->relinkConnections(operationAlpha->getOutputSocket()); + converter.addOperation(operationYCCImage); + converter.addOperation(operationYCCMatte); + + converter.mapInputSocket(inputSocketImage, operationYCCImage->getInputSocket(0)); + converter.addLink(operationYCCImage->getOutputSocket(), matte->getInputSocket(0)); + converter.addLink(operationYCCImage->getOutputSocket(), operationAlpha->getInputSocket(0)); + + converter.mapInputSocket(inputSocketKey, operationYCCMatte->getInputSocket(0)); + converter.addLink(operationYCCMatte->getOutputSocket(), matte->getInputSocket(1)); + + operation = matte; } + + converter.addLink(operation->getOutputSocket(), operationAlpha->getInputSocket(1)); + + converter.mapOutputSocket(outputSocketMatte, operation->getOutputSocket()); + converter.mapOutputSocket(outputSocketImage, operationAlpha->getOutputSocket()); + + converter.addPreview(operationAlpha->getOutputSocket()); } |