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::apply() { // Recursively determine paint rects first, so that we don't redraw images // if a smaller section is requested first. determineAbsolutePaintRect(maxEffectRect()); applyRecursive(); }
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 (!isFilterSizeValid(m_absolutePaintRect)) return; if (requiresValidPreMultipliedPixels()) { for (unsigned i = 0; i < size; ++i) inputEffect(i)->correctFilterResultIfNeeded(); } if (applySkia()) return; applySoftware(); }
GraphicsContext* FilterEffect::effectContext() { determineAbsolutePaintRect(); if (m_absolutePaintRect.isEmpty()) return 0; m_effectBuffer = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB); if (!m_effectBuffer) return 0; return m_effectBuffer->context(); }
ByteArray* FilterEffect::createPremultipliedImageResult() { // Only one result type is allowed. ASSERT(!hasResult()); ASSERT(isFilterSizeValid(m_absolutePaintRect)); determineAbsolutePaintRect(); if (m_absolutePaintRect.isEmpty()) return 0; m_premultipliedImageResult = ByteArray::create(m_absolutePaintRect.width() * m_absolutePaintRect.height() * 4); return m_premultipliedImageResult.get(); }
ImageBuffer* FilterEffect::createImageBufferResult() { // Only one result type is allowed. ASSERT(!hasResult()); determineAbsolutePaintRect(); if (m_absolutePaintRect.isEmpty()) return 0; m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), ColorSpaceLinearRGB); if (!m_imageBufferResult) return 0; ASSERT(m_imageBufferResult->context()); return m_imageBufferResult.get(); }
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; } determineAbsolutePaintRect(); // Add platform specific apply functions here and return earlier. platformApplySoftware(); }