OutputSocket *KeyingNode::setupFeather(ExecutionSystem *graph, CompositorContext *context, OutputSocket *featherInput, int falloff, int distance) { /* this uses a modified gaussian blur function otherwise its far too slow */ CompositorQuality quality = context->getQuality(); /* initialize node data */ NodeBlurData *data = &this->m_alpha_blur; memset(data, 0, sizeof(*data)); data->filtertype = R_FILTER_GAUSS; if (distance > 0) { data->sizex = data->sizey = distance; } else { data->sizex = data->sizey = -distance; } GaussianAlphaXBlurOperation *operationx = new GaussianAlphaXBlurOperation(); operationx->setData(data); operationx->setQuality(quality); operationx->setSize(1.0f); operationx->setSubtract(distance < 0); operationx->setFalloff(falloff); operationx->setbNode(this->getbNode()); graph->addOperation(operationx); GaussianAlphaYBlurOperation *operationy = new GaussianAlphaYBlurOperation(); operationy->setData(data); operationy->setQuality(quality); operationy->setSize(1.0f); operationy->setSubtract(distance < 0); operationy->setFalloff(falloff); operationy->setbNode(this->getbNode()); graph->addOperation(operationy); addLink(graph, featherInput, operationx->getInputSocket(0)); addLink(graph, operationx->getOutputSocket(), operationy->getInputSocket(0)); return operationy->getOutputSocket(); }