void FilterEffect::apply() { if (hasResult()) return; unsigned size = m_inputEffects.size(); for (unsigned i = 0; i < size; ++i) { FilterEffect* in = m_inputEffects.at(i).get(); in->apply(); if (!in->hasResult()) return; // Convert input results to the current effect's color space. transformResultColorSpace(in, i); } determineAbsolutePaintRect(); setResultColorSpace(m_operatingColorSpace); if (!isFilterSizeValid(m_absolutePaintRect)) return; if (requiresValidPreMultipliedPixels()) { for (unsigned i = 0; i < size; ++i) inputEffect(i)->correctFilterResultIfNeeded(); } // Add platform specific apply functions here and return earlier. #if ENABLE(OPENCL) if (platformApplyOpenCL()) return; #endif platformApplySoftware(); }
void FilterEffect::apply() { if (hasResult()) return; unsigned size = m_inputEffects.size(); for (unsigned i = 0; i < size; ++i) { FilterEffect* in = m_inputEffects.at(i).get(); in->apply(); if (!in->hasResult()) return; // Convert input results to the current effect's color space. transformResultColorSpace(in, i); } determineAbsolutePaintRect(); setResultColorSpace(m_operatingColorSpace); if (m_absolutePaintRect.isEmpty() || ImageBuffer::sizeNeedsClamping(m_absolutePaintRect.size())) return; if (requiresValidPreMultipliedPixels()) { for (unsigned i = 0; i < size; ++i) inputEffect(i)->correctFilterResultIfNeeded(); } // Add platform specific apply functions here and return earlier. platformApplySoftware(); }
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(); }