void FilterEffect::applyRecursive() { if (hasResult()) return; unsigned size = m_inputEffects.size(); for (unsigned i = 0; i < size; ++i) { FilterEffect* in = m_inputEffects.at(i).get(); in->applyRecursive(); if (!in->hasResult()) return; // Convert input results to the current effect's color space. transformResultColorSpace(in, i); } setResultColorSpace(m_operatingColorSpace); if (!isFilterSizeValid(m_absolutePaintRect)) return; if (!mayProduceInvalidPreMultipliedPixels()) { for (unsigned i = 0; i < size; ++i) inputEffect(i)->correctFilterResultIfNeeded(); } applySoftware(); }