diff options
Diffstat (limited to 'source/blender/compositor/nodes/COM_ZCombineNode.cpp')
-rw-r--r-- | source/blender/compositor/nodes/COM_ZCombineNode.cpp | 96 |
1 files changed, 44 insertions, 52 deletions
diff --git a/source/blender/compositor/nodes/COM_ZCombineNode.cpp b/source/blender/compositor/nodes/COM_ZCombineNode.cpp index 685c9695eec..d46600cc368 100644 --- a/source/blender/compositor/nodes/COM_ZCombineNode.cpp +++ b/source/blender/compositor/nodes/COM_ZCombineNode.cpp @@ -32,79 +32,71 @@ #include "DNA_material_types.h" // the ramp types -void ZCombineNode::convertToOperations(ExecutionSystem *system, CompositorContext *context) +void ZCombineNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const { - if ((context->getRenderData()->scemode & R_FULL_SAMPLE) || this->getbNode()->custom2) { - if (this->getOutputSocket(0)->isConnected()) { - ZCombineOperation *operation = NULL; - if (this->getbNode()->custom1) { - operation = new ZCombineAlphaOperation(); - } - else { - operation = new ZCombineOperation(); - } - - this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, system); - this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, system); - this->getInputSocket(2)->relinkConnections(operation->getInputSocket(2), 2, system); - this->getInputSocket(3)->relinkConnections(operation->getInputSocket(3), 3, system); - this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket()); - system->addOperation(operation); - if (this->getOutputSocket(1)->isConnected()) { - MathMinimumOperation *zoperation = new MathMinimumOperation(); - addLink(system, operation->getInputSocket(1)->getConnection()->getFromSocket(), zoperation->getInputSocket(0)); - addLink(system, operation->getInputSocket(3)->getConnection()->getFromSocket(), zoperation->getInputSocket(1)); - this->getOutputSocket(1)->relinkConnections(zoperation->getOutputSocket()); - system->addOperation(zoperation); - } + if ((context.getRenderData()->scemode & R_FULL_SAMPLE) || this->getbNode()->custom2) { + ZCombineOperation *operation = NULL; + if (this->getbNode()->custom1) { + operation = new ZCombineAlphaOperation(); } else { - if (this->getOutputSocket(1)->isConnected()) { - MathMinimumOperation *zoperation = new MathMinimumOperation(); - this->getInputSocket(1)->relinkConnections(zoperation->getInputSocket(0), 1, system); - this->getInputSocket(3)->relinkConnections(zoperation->getInputSocket(1), 3, system); - this->getOutputSocket(1)->relinkConnections(zoperation->getOutputSocket()); - system->addOperation(zoperation); - } + operation = new ZCombineOperation(); } + converter.addOperation(operation); + + converter.mapInputSocket(getInputSocket(0), operation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1)); + converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2)); + converter.mapInputSocket(getInputSocket(3), operation->getInputSocket(3)); + converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket()); + + MathMinimumOperation *zoperation = new MathMinimumOperation(); + converter.addOperation(zoperation); + + converter.mapInputSocket(getInputSocket(1), zoperation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(3), zoperation->getInputSocket(1)); + converter.mapOutputSocket(getOutputSocket(1), zoperation->getOutputSocket()); } else { + /* XXX custom1 is "use_alpha", what on earth is this supposed to do here?!? */ // not full anti alias, use masking for Z combine. be aware it uses anti aliasing. // step 1 create mask NodeOperation *maskoperation; - if (this->getbNode()->custom1) { maskoperation = new MathGreaterThanOperation(); - this->getInputSocket(1)->relinkConnections(maskoperation->getInputSocket(0), 3, system); - this->getInputSocket(3)->relinkConnections(maskoperation->getInputSocket(1), 1, system); + converter.addOperation(maskoperation); + + converter.mapInputSocket(getInputSocket(1), maskoperation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(3), maskoperation->getInputSocket(1)); } else { maskoperation = new MathLessThanOperation(); - this->getInputSocket(1)->relinkConnections(maskoperation->getInputSocket(0), 1, system); - this->getInputSocket(3)->relinkConnections(maskoperation->getInputSocket(1), 3, system); + converter.addOperation(maskoperation); + + converter.mapInputSocket(getInputSocket(1), maskoperation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(3), maskoperation->getInputSocket(1)); } // step 2 anti alias mask bit of an expensive operation, but does the trick AntiAliasOperation *antialiasoperation = new AntiAliasOperation(); - addLink(system, maskoperation->getOutputSocket(), antialiasoperation->getInputSocket(0)); + converter.addOperation(antialiasoperation); + + converter.addLink(maskoperation->getOutputSocket(), antialiasoperation->getInputSocket(0)); // use mask to blend between the input colors. ZCombineMaskOperation *zcombineoperation = this->getbNode()->custom1 ? new ZCombineMaskAlphaOperation() : new ZCombineMaskOperation(); - addLink(system, antialiasoperation->getOutputSocket(), zcombineoperation->getInputSocket(0)); - this->getInputSocket(0)->relinkConnections(zcombineoperation->getInputSocket(1), 0, system); - this->getInputSocket(2)->relinkConnections(zcombineoperation->getInputSocket(2), 2, system); - this->getOutputSocket(0)->relinkConnections(zcombineoperation->getOutputSocket()); + converter.addOperation(zcombineoperation); + + converter.addLink(antialiasoperation->getOutputSocket(), zcombineoperation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(0), zcombineoperation->getInputSocket(1)); + converter.mapInputSocket(getInputSocket(2), zcombineoperation->getInputSocket(2)); + converter.mapOutputSocket(getOutputSocket(0), zcombineoperation->getOutputSocket()); - system->addOperation(maskoperation); - system->addOperation(antialiasoperation); - system->addOperation(zcombineoperation); - - if (this->getOutputSocket(1)->isConnected()) { - MathMinimumOperation *zoperation = new MathMinimumOperation(); - addLink(system, maskoperation->getInputSocket(0)->getConnection()->getFromSocket(), zoperation->getInputSocket(0)); - addLink(system, maskoperation->getInputSocket(1)->getConnection()->getFromSocket(), zoperation->getInputSocket(1)); - this->getOutputSocket(1)->relinkConnections(zoperation->getOutputSocket()); - system->addOperation(zoperation); - } + MathMinimumOperation *zoperation = new MathMinimumOperation(); + converter.addOperation(zoperation); + + converter.mapInputSocket(getInputSocket(1), zoperation->getInputSocket(0)); + converter.mapInputSocket(getInputSocket(3), zoperation->getInputSocket(1)); + converter.mapOutputSocket(getOutputSocket(1), zoperation->getOutputSocket()); } } |