void AlphaOverNode::convertToOperations(NodeConverter &converter, const CompositorContext &/*context*/) const { NodeInput *color1Socket = this->getInputSocket(1); NodeInput *color2Socket = this->getInputSocket(2); bNode *editorNode = this->getbNode(); MixBaseOperation *convertProg; NodeTwoFloats *ntf = (NodeTwoFloats *)editorNode->storage; if (ntf->x != 0.0f) { AlphaOverMixedOperation *mixOperation = new AlphaOverMixedOperation(); mixOperation->setX(ntf->x); convertProg = mixOperation; } else if (editorNode->custom1) { convertProg = new AlphaOverKeyOperation(); } else { convertProg = new AlphaOverPremultiplyOperation(); } convertProg->setUseValueAlphaMultiply(false); if (color1Socket->isLinked()) { convertProg->setResolutionInputSocketIndex(1); } else if (color2Socket->isLinked()) { convertProg->setResolutionInputSocketIndex(2); } else { convertProg->setResolutionInputSocketIndex(0); } converter.addOperation(convertProg); converter.mapInputSocket(getInputSocket(0), convertProg->getInputSocket(0)); converter.mapInputSocket(getInputSocket(1), convertProg->getInputSocket(1)); converter.mapInputSocket(getInputSocket(2), convertProg->getInputSocket(2)); converter.mapOutputSocket(getOutputSocket(0), convertProg->getOutputSocket(0)); }
void MixNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context) { InputSocket *valueSocket = this->getInputSocket(0); InputSocket *color1Socket = this->getInputSocket(1); InputSocket *color2Socket = this->getInputSocket(2); OutputSocket *outputSocket = this->getOutputSocket(0); bNode *editorNode = this->getbNode(); bool useAlphaPremultiply = this->getbNode()->custom2 & 1; bool useClamp = this->getbNode()->custom2 & 2; MixBaseOperation *convertProg; switch (editorNode->custom1) { case MA_RAMP_ADD: convertProg = new MixAddOperation(); break; case MA_RAMP_MULT: convertProg = new MixMultiplyOperation(); break; case MA_RAMP_LIGHT: convertProg = new MixLightenOperation(); break; case MA_RAMP_BURN: convertProg = new MixBurnOperation(); break; case MA_RAMP_HUE: convertProg = new MixHueOperation(); break; case MA_RAMP_COLOR: convertProg = new MixColorOperation(); break; case MA_RAMP_SOFT: convertProg = new MixSoftLightOperation(); break; case MA_RAMP_SCREEN: convertProg = new MixScreenOperation(); break; case MA_RAMP_LINEAR: convertProg = new MixLinearLightOperation(); break; case MA_RAMP_DIFF: convertProg = new MixDifferenceOperation(); break; case MA_RAMP_SAT: convertProg = new MixSaturationOperation(); break; case MA_RAMP_DIV: convertProg = new MixDivideOperation(); break; case MA_RAMP_SUB: convertProg = new MixSubtractOperation(); break; case MA_RAMP_DARK: convertProg = new MixDarkenOperation(); break; case MA_RAMP_OVERLAY: convertProg = new MixOverlayOperation(); break; case MA_RAMP_VAL: convertProg = new MixValueOperation(); break; case MA_RAMP_DODGE: convertProg = new MixDodgeOperation(); break; case MA_RAMP_BLEND: default: convertProg = new MixBlendOperation(); break; } convertProg->setUseValueAlphaMultiply(useAlphaPremultiply); convertProg->setUseClamp(useClamp); if (color1Socket->isConnected()) { convertProg->setResolutionInputSocketIndex(1); } else { if (color2Socket->isConnected()) convertProg->setResolutionInputSocketIndex(2); else convertProg->setResolutionInputSocketIndex(0); } valueSocket->relinkConnections(convertProg->getInputSocket(0), 0, graph); color1Socket->relinkConnections(convertProg->getInputSocket(1), 1, graph); color2Socket->relinkConnections(convertProg->getInputSocket(2), 2, graph); outputSocket->relinkConnections(convertProg->getOutputSocket(0)); addPreviewOperation(graph, context, convertProg->getOutputSocket(0)); convertProg->getInputSocket(2)->setResizeMode(color2Socket->getResizeMode()); graph->addOperation(convertProg); }