| Index: src/effects/SkBlurMaskFilter.cpp
|
| diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
|
| index e4133a8bceff3ec689c253afb671de8a3113c5fe..59ccdfd14219169257b4e7e8c2a149a071b5ff89 100644
|
| --- a/src/effects/SkBlurMaskFilter.cpp
|
| +++ b/src/effects/SkBlurMaskFilter.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "SkGpuBlurUtils.h"
|
| #include "SkReadBuffer.h"
|
| #include "SkWriteBuffer.h"
|
| +#include "SkMaskCache.h"
|
| #include "SkMaskFilter.h"
|
| #include "SkRRect.h"
|
| #include "SkRTConf.h"
|
| @@ -368,6 +369,14 @@ SkBlurMaskFilterImpl::filterRRectToNine(const SkRRect& rrect, const SkMatrix& ma
|
| radii[SkRRect::kLowerLeft_Corner] = LL;
|
| smallRR.setRectRadii(smallR, radii);
|
|
|
| + SkScalar sigma = this->computeXformedSigma(matrix);
|
| + if (SkMaskCache::Find(sigma, rrect, &patch->fMask)) {
|
| + patch->fOuterRect = dstM.fBounds;
|
| + patch->fCenter.fX = SkScalarCeilToInt(leftUnstretched) + 1;
|
| + patch->fCenter.fY = SkScalarCeilToInt(topUnstretched) + 1;
|
| + return kTrue_FilterReturn;
|
| + }
|
| +
|
| bool analyticBlurWorked = false;
|
| if (c_analyticBlurRRect) {
|
| analyticBlurWorked =
|
| @@ -391,6 +400,8 @@ SkBlurMaskFilterImpl::filterRRectToNine(const SkRRect& rrect, const SkMatrix& ma
|
| patch->fOuterRect = dstM.fBounds;
|
| patch->fCenter.fX = SkScalarCeilToInt(leftUnstretched) + 1;
|
| patch->fCenter.fY = SkScalarCeilToInt(topUnstretched) + 1;
|
| + SkMaskCache::Add(sigma, rrect, patch->fMask);
|
| +
|
| return kTrue_FilterReturn;
|
| }
|
|
|
| @@ -470,6 +481,13 @@ SkBlurMaskFilterImpl::filterRectsToNine(const SkRect rects[], int count,
|
| smallH + (innerIR.top() - srcM.fBounds.top()));
|
| }
|
|
|
| + SkScalar sigma = this->computeXformedSigma(matrix);
|
| + if (SkMaskCache::Find(sigma, count, rects, &patch->fMask)) {
|
| + patch->fOuterRect = dstM.fBounds;
|
| + patch->fCenter = center;
|
| + return kTrue_FilterReturn;
|
| + }
|
| +
|
| // +1 so we get a clean, stretchable, center row/col
|
| smallW += 1;
|
| smallH += 1;
|
| @@ -513,6 +531,8 @@ SkBlurMaskFilterImpl::filterRectsToNine(const SkRect rects[], int count,
|
| patch->fMask.fBounds.offsetTo(0, 0);
|
| patch->fOuterRect = dstM.fBounds;
|
| patch->fCenter = center;
|
| + SkMaskCache::Add(sigma, count, rects, patch->fMask);
|
| +
|
| return kTrue_FilterReturn;
|
| }
|
|
|
| @@ -917,7 +937,6 @@ GrEffect* GrRRectBlurEffect::Create(GrContext* context, float sigma, const SkRRe
|
| SkBlurMask::BoxBlur(&blurred_mask, mask, sigma, kNormal_SkBlurStyle, kHigh_SkBlurQuality, NULL, true );
|
|
|
| blurNinePatchTexture = context->createTexture(¶ms, texDesc, blurRRectNinePatchID, blurred_mask.fImage, 0);
|
| - SkMask::FreeImage(blurred_mask.fImage);
|
| }
|
|
|
| SkAutoTUnref<GrTexture> blurunref(blurNinePatchTexture);
|
|
|