RawPtr<FilterEffect> SVGFESpecularLightingElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
    FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(m_in1->currentValue()->value()));
    ASSERT(input1);

    LayoutObject* layoutObject = this->layoutObject();
    if (!layoutObject)
        return nullptr;

    ASSERT(layoutObject->style());
    Color color = layoutObject->style()->svgStyle().lightingColor();

    const SVGFELightElement* lightNode = SVGFELightElement::findLightElement(*this);
    RefPtr<LightSource> lightSource = lightNode ? lightNode->lightSource(filter) : nullptr;

    RawPtr<FilterEffect> effect = FESpecularLighting::create(filter,
        color,
        m_surfaceScale->currentValue()->value(),
        m_specularConstant->currentValue()->value(),
        m_specularExponent->currentValue()->value(),
        lightSource.release());
    effect->inputEffects().append(input1);
    return effect.release();
}