Moving SkBlurImageFilter into core
BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2255803003 Committed: https://skia.googlesource.com/skia/+/dd3259eb95c3b47e11eefa3b176365a112a32b48 Committed: https://skia.googlesource.com/skia/+/e426babe7552b1cb4e27cdf4e90826feabb9e3b0 Committed: https://skia.googlesource.com/skia/+/4d760175686df8f61a11b66946eb307d89dd2c75 Review-Url: https://codereview.chromium.org/2255803003
This commit is contained in:
parent
bb51f4a3a7
commit
a97a1ab571
@ -60,6 +60,7 @@
|
||||
'<(skia_src_path)/core/SkBlitter_PM4f.cpp',
|
||||
'<(skia_src_path)/core/SkBlitter_RGB16.cpp',
|
||||
'<(skia_src_path)/core/SkBlitter_Sprite.cpp',
|
||||
'<(skia_src_path)/core/SkBlurImageFilter.cpp',
|
||||
'<(skia_src_path)/core/SkBuffer.cpp',
|
||||
'<(skia_src_path)/core/SkCachedData.cpp',
|
||||
'<(skia_src_path)/core/SkCanvas.cpp',
|
||||
@ -139,6 +140,8 @@
|
||||
'<(skia_src_path)/core/SkGlyphCache.cpp',
|
||||
'<(skia_src_path)/core/SkGlyphCache.h',
|
||||
'<(skia_src_path)/core/SkGlyphCache_Globals.h',
|
||||
'<(skia_src_path)/core/SkGpuBlurUtils.h',
|
||||
'<(skia_src_path)/core/SkGpuBlurUtils.cpp',
|
||||
'<(skia_src_path)/core/SkGraphics.cpp',
|
||||
'<(skia_src_path)/core/SkHalf.cpp',
|
||||
'<(skia_src_path)/core/SkHalf.h',
|
||||
|
@ -26,7 +26,6 @@
|
||||
'<(skia_src_path)/effects/SkBlurDrawLooper.cpp',
|
||||
'<(skia_src_path)/effects/SkBlurMask.cpp',
|
||||
'<(skia_src_path)/effects/SkBlurMask.h',
|
||||
'<(skia_src_path)/effects/SkBlurImageFilter.cpp',
|
||||
'<(skia_src_path)/effects/SkBlurMaskFilter.cpp',
|
||||
'<(skia_src_path)/effects/SkColorCubeFilter.cpp',
|
||||
'<(skia_src_path)/effects/SkColorFilterImageFilter.cpp',
|
||||
@ -45,8 +44,6 @@
|
||||
'<(skia_src_path)/effects/SkImageSource.cpp',
|
||||
'<(skia_src_path)/effects/SkGammaColorFilter.cpp',
|
||||
'<(skia_src_path)/effects/SkGaussianEdgeShader.cpp',
|
||||
'<(skia_src_path)/effects/SkGpuBlurUtils.h',
|
||||
'<(skia_src_path)/effects/SkGpuBlurUtils.cpp',
|
||||
'<(skia_src_path)/effects/SkLayerDrawLooper.cpp',
|
||||
'<(skia_src_path)/effects/SkLayerRasterizer.cpp',
|
||||
'<(skia_src_path)/effects/SkLightingImageFilter.cpp',
|
||||
|
@ -152,6 +152,10 @@ public:
|
||||
return this->isColorFilterNode(filterPtr);
|
||||
}
|
||||
|
||||
static sk_sp<SkImageFilter> MakeBlur(SkScalar sigmaX, SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect = nullptr);
|
||||
|
||||
/**
|
||||
* Returns true (and optionally returns a ref'd filter) if this imagefilter can be completely
|
||||
* replaced by the returned colorfilter. i.e. the two effects will affect drawing in the
|
||||
@ -229,6 +233,7 @@ public:
|
||||
|
||||
SK_TO_STRING_PUREVIRT()
|
||||
SK_DEFINE_FLATTENABLE_TYPE(SkImageFilter)
|
||||
SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
|
||||
|
||||
protected:
|
||||
class Common {
|
||||
|
@ -9,40 +9,14 @@
|
||||
#define SkBlurImageFilter_DEFINED
|
||||
|
||||
#include "SkImageFilter.h"
|
||||
#include "SkSize.h"
|
||||
|
||||
class SK_API SkBlurImageFilter : public SkImageFilter {
|
||||
class SK_API SkBlurImageFilter {
|
||||
public:
|
||||
static sk_sp<SkImageFilter> Make(SkScalar sigmaX, SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect = nullptr);
|
||||
|
||||
SkRect computeFastBounds(const SkRect&) const override;
|
||||
|
||||
SK_TO_STRING_OVERRIDE()
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilter)
|
||||
|
||||
#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
|
||||
static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = nullptr,
|
||||
const CropRect* cropRect = nullptr) {
|
||||
return Make(sigmaX, sigmaY, sk_ref_sp<SkImageFilter>(input), cropRect).release();
|
||||
const SkImageFilter::CropRect* cropRect = nullptr) {
|
||||
return SkImageFilter::MakeBlur(sigmaX, sigmaY, input, cropRect);
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void flatten(SkWriteBuffer&) const override;
|
||||
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
|
||||
SkIPoint* offset) const override;
|
||||
SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
|
||||
|
||||
private:
|
||||
SkBlurImageFilter(SkScalar sigmaX,
|
||||
SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect);
|
||||
|
||||
SkSize fSigma;
|
||||
typedef SkImageFilter INHERITED;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -5,8 +5,6 @@
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "SkBlurImageFilter.h"
|
||||
|
||||
#include "SkAutoPixmapStorage.h"
|
||||
#include "SkColorPriv.h"
|
||||
#include "SkGpuBlurUtils.h"
|
||||
@ -20,13 +18,52 @@
|
||||
#include "SkGr.h"
|
||||
#endif
|
||||
|
||||
sk_sp<SkImageFilter> SkBlurImageFilter::Make(SkScalar sigmaX, SkScalar sigmaY,
|
||||
class SkBlurImageFilterImpl : public SkImageFilter {
|
||||
public:
|
||||
SkBlurImageFilterImpl(SkScalar sigmaX,
|
||||
SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect);
|
||||
|
||||
SkRect computeFastBounds(const SkRect&) const override;
|
||||
|
||||
SK_TO_STRING_OVERRIDE()
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilterImpl)
|
||||
|
||||
#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
|
||||
static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = nullptr,
|
||||
const CropRect* cropRect = nullptr) {
|
||||
return SkImageFilter::MakeBlur(sigmaX, sigmaY, sk_ref_sp<SkImageFilter>(input),
|
||||
cropRect).release();
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
void flatten(SkWriteBuffer&) const override;
|
||||
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
|
||||
SkIPoint* offset) const override;
|
||||
SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
|
||||
|
||||
private:
|
||||
SkSize fSigma;
|
||||
typedef SkImageFilter INHERITED;
|
||||
|
||||
friend class SkImageFilter;
|
||||
};
|
||||
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkImageFilter)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurImageFilterImpl)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
sk_sp<SkImageFilter> SkImageFilter::MakeBlur(SkScalar sigmaX, SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect) {
|
||||
if (0 == sigmaX && 0 == sigmaY && !cropRect) {
|
||||
return input;
|
||||
}
|
||||
return sk_sp<SkImageFilter>(new SkBlurImageFilter(sigmaX, sigmaY, input, cropRect));
|
||||
return sk_sp<SkImageFilter>(new SkBlurImageFilterImpl(sigmaX, sigmaY, input, cropRect));
|
||||
}
|
||||
|
||||
// This rather arbitrary-looking value results in a maximum box blur kernel size
|
||||
@ -44,7 +81,7 @@ static SkVector map_sigma(const SkSize& localSigma, const SkMatrix& ctm) {
|
||||
return sigma;
|
||||
}
|
||||
|
||||
SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX,
|
||||
SkBlurImageFilterImpl::SkBlurImageFilterImpl(SkScalar sigmaX,
|
||||
SkScalar sigmaY,
|
||||
sk_sp<SkImageFilter> input,
|
||||
const CropRect* cropRect)
|
||||
@ -52,14 +89,14 @@ SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX,
|
||||
, fSigma(SkSize::Make(sigmaX, sigmaY)) {
|
||||
}
|
||||
|
||||
sk_sp<SkFlattenable> SkBlurImageFilter::CreateProc(SkReadBuffer& buffer) {
|
||||
sk_sp<SkFlattenable> SkBlurImageFilterImpl::CreateProc(SkReadBuffer& buffer) {
|
||||
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
|
||||
SkScalar sigmaX = buffer.readScalar();
|
||||
SkScalar sigmaY = buffer.readScalar();
|
||||
return Make(sigmaX, sigmaY, common.getInput(0), &common.cropRect());
|
||||
return SkImageFilter::MakeBlur(sigmaX, sigmaY, common.getInput(0), &common.cropRect());
|
||||
}
|
||||
|
||||
void SkBlurImageFilter::flatten(SkWriteBuffer& buffer) const {
|
||||
void SkBlurImageFilterImpl::flatten(SkWriteBuffer& buffer) const {
|
||||
this->INHERITED::flatten(buffer);
|
||||
buffer.writeScalar(fSigma.fWidth);
|
||||
buffer.writeScalar(fSigma.fHeight);
|
||||
@ -80,7 +117,7 @@ static void get_box3_params(SkScalar s, int *kernelSize, int* kernelSize3, int *
|
||||
}
|
||||
}
|
||||
|
||||
sk_sp<SkSpecialImage> SkBlurImageFilter::onFilterImage(SkSpecialImage* source,
|
||||
sk_sp<SkSpecialImage> SkBlurImageFilterImpl::onFilterImage(SkSpecialImage* source,
|
||||
const Context& ctx,
|
||||
SkIPoint* offset) const {
|
||||
SkIPoint inputOffset = SkIPoint::Make(0, 0);
|
||||
@ -231,14 +268,14 @@ sk_sp<SkSpecialImage> SkBlurImageFilter::onFilterImage(SkSpecialImage* source,
|
||||
}
|
||||
|
||||
|
||||
SkRect SkBlurImageFilter::computeFastBounds(const SkRect& src) const {
|
||||
SkRect SkBlurImageFilterImpl::computeFastBounds(const SkRect& src) const {
|
||||
SkRect bounds = this->getInput(0) ? this->getInput(0)->computeFastBounds(src) : src;
|
||||
bounds.outset(SkScalarMul(fSigma.width(), SkIntToScalar(3)),
|
||||
SkScalarMul(fSigma.height(), SkIntToScalar(3)));
|
||||
return bounds;
|
||||
}
|
||||
|
||||
SkIRect SkBlurImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm,
|
||||
SkIRect SkBlurImageFilterImpl::onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm,
|
||||
MapDirection) const {
|
||||
SkVector sigma = map_sigma(fSigma, ctm);
|
||||
return src.makeOutset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))),
|
||||
@ -246,8 +283,8 @@ SkIRect SkBlurImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatrix
|
||||
}
|
||||
|
||||
#ifndef SK_IGNORE_TO_STRING
|
||||
void SkBlurImageFilter::toString(SkString* str) const {
|
||||
str->appendf("SkBlurImageFilter: (");
|
||||
void SkBlurImageFilterImpl::toString(SkString* str) const {
|
||||
str->appendf("SkBlurImageFilterImpl: (");
|
||||
str->appendf("sigma: (%f, %f) input (", fSigma.fWidth, fSigma.fHeight);
|
||||
|
||||
if (this->getInput(0)) {
|
@ -102,7 +102,7 @@ void SkFlattenable::PrivateInitializer::InitEffects() {
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSumPathEffect)
|
||||
|
||||
// ImageFilter
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurImageFilter)
|
||||
SkImageFilter::InitializeFlattenables();
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDilateImageFilter)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDisplacementMapEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDropShadowImageFilter)
|
||||
|
Loading…
Reference in New Issue
Block a user