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() { 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; } determineAbsolutePaintRect(); // Add platform specific apply functions here and return earlier. platformApplySoftware(); }
bool SourceAlpha::platformApplyOpenCL() { FilterContextOpenCL* context = FilterContextOpenCL::context(); if (!context) return false; platformApplySoftware(); ImageBuffer* sourceImage = asImageBuffer(); if (!sourceImage) return false; RefPtr<Uint8ClampedArray> sourceImageData = sourceImage->getUnmultipliedImageData(IntRect(IntPoint(), sourceImage->internalSize())); createOpenCLImageResult(sourceImageData->data()); return true; }
// This function will be changed to abstract virtual when all filters are landed. bool FilterEffect::platformApplyOpenCL() { if (!FilterContextOpenCL::context()) return false; unsigned size = m_inputEffects.size(); for (unsigned i = 0; i < size; ++i) { FilterEffect* in = m_inputEffects.at(i).get(); // Software code path expects that at least one of the following fileds is valid. if (!in->m_imageBufferResult && !in->m_unmultipliedImageResult && !in->m_premultipliedImageResult) in->asImageBuffer(); } platformApplySoftware(); ImageBuffer* sourceImage = asImageBuffer(); if (sourceImage) { RefPtr<Uint8ClampedArray> sourceImageData = sourceImage->getUnmultipliedImageData(IntRect(IntPoint(), sourceImage->internalSize())); createOpenCLImageResult(sourceImageData->data()); } return true; }