| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
| 10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 SkMask::Format getFormat() const override; | 42 SkMask::Format getFormat() const override; |
| 43 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, | 43 virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, |
| 44 SkIPoint* margin) const override; | 44 SkIPoint* margin) const override; |
| 45 | 45 |
| 46 #if SK_SUPPORT_GPU | 46 #if SK_SUPPORT_GPU |
| 47 virtual bool canFilterMaskGPU(const SkRect& devBounds, | 47 virtual bool canFilterMaskGPU(const SkRect& devBounds, |
| 48 const SkIRect& clipBounds, | 48 const SkIRect& clipBounds, |
| 49 const SkMatrix& ctm, | 49 const SkMatrix& ctm, |
| 50 SkRect* maskRect) const override; | 50 SkRect* maskRect) const override; |
| 51 virtual bool directFilterMaskGPU(GrContext* context, | 51 virtual bool directFilterMaskGPU(GrContext* context, |
| 52 GrDrawContext* drawContext, |
| 52 GrRenderTarget* rt, | 53 GrRenderTarget* rt, |
| 53 GrPaint* grp, | 54 GrPaint* grp, |
| 54 const GrClip&, | 55 const GrClip&, |
| 55 const SkMatrix& viewMatrix, | 56 const SkMatrix& viewMatrix, |
| 56 const SkStrokeRec& strokeRec, | 57 const SkStrokeRec& strokeRec, |
| 57 const SkPath& path) const override; | 58 const SkPath& path) const override; |
| 58 virtual bool directFilterRRectMaskGPU(GrContext* context, | 59 virtual bool directFilterRRectMaskGPU(GrContext* context, |
| 59 GrRenderTarget* rt, | 60 GrRenderTarget* rt, |
| 60 GrPaint* grp, | 61 GrPaint* grp, |
| 61 const GrClip&, | 62 const GrClip&, |
| (...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 GrTexture**) { | 828 GrTexture**) { |
| 828 float sigma = random->nextRangeF(3,8); | 829 float sigma = random->nextRangeF(3,8); |
| 829 float width = random->nextRangeF(200,300); | 830 float width = random->nextRangeF(200,300); |
| 830 float height = random->nextRangeF(200,300); | 831 float height = random->nextRangeF(200,300); |
| 831 return GrRectBlurEffect::Create(context->textureProvider(), SkRect::MakeWH(w
idth, height), | 832 return GrRectBlurEffect::Create(context->textureProvider(), SkRect::MakeWH(w
idth, height), |
| 832 sigma); | 833 sigma); |
| 833 } | 834 } |
| 834 | 835 |
| 835 | 836 |
| 836 bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, | 837 bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, |
| 838 GrDrawContext* drawContext, |
| 837 GrRenderTarget* rt, | 839 GrRenderTarget* rt, |
| 838 GrPaint* grp, | 840 GrPaint* grp, |
| 839 const GrClip& clip, | 841 const GrClip& clip, |
| 840 const SkMatrix& viewMatrix, | 842 const SkMatrix& viewMatrix, |
| 841 const SkStrokeRec& strokeRec, | 843 const SkStrokeRec& strokeRec, |
| 842 const SkPath& path) const { | 844 const SkPath& path) const { |
| 845 SkASSERT(drawContext); |
| 846 |
| 843 if (fBlurStyle != kNormal_SkBlurStyle) { | 847 if (fBlurStyle != kNormal_SkBlurStyle) { |
| 844 return false; | 848 return false; |
| 845 } | 849 } |
| 846 | 850 |
| 847 SkRect rect; | 851 SkRect rect; |
| 848 if (!path.isRect(&rect)) { | 852 if (!path.isRect(&rect)) { |
| 849 return false; | 853 return false; |
| 850 } | 854 } |
| 851 | 855 |
| 852 if (!strokeRec.isFillStyle()) { | 856 if (!strokeRec.isFillStyle()) { |
| 853 return false; | 857 return false; |
| 854 } | 858 } |
| 855 | 859 |
| 856 SkMatrix ctm = viewMatrix; | 860 SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); |
| 857 SkScalar xformedSigma = this->computeXformedSigma(ctm); | |
| 858 | 861 |
| 859 int pad=SkScalarCeilToInt(6*xformedSigma)/2; | 862 int pad = SkScalarCeilToInt(6*xformedSigma)/2; |
| 860 rect.outset(SkIntToScalar(pad), SkIntToScalar(pad)); | 863 rect.outset(SkIntToScalar(pad), SkIntToScalar(pad)); |
| 861 | 864 |
| 862 SkAutoTUnref<GrFragmentProcessor> fp(GrRectBlurEffect::Create( | 865 SkAutoTUnref<GrFragmentProcessor> fp(GrRectBlurEffect::Create( |
| 863 context->textureProvider(), rect, xformedSigma)); | 866 context->textureProvider(), rect, xformedSigma)); |
| 864 if (!fp) { | 867 if (!fp) { |
| 865 return false; | 868 return false; |
| 866 } | 869 } |
| 867 | 870 |
| 868 grp->addCoverageProcessor(fp); | 871 grp->addCoverageProcessor(fp); |
| 869 | 872 |
| 870 SkMatrix inverse; | 873 SkMatrix inverse; |
| 871 if (!viewMatrix.invert(&inverse)) { | 874 if (!viewMatrix.invert(&inverse)) { |
| 872 return false; | 875 return false; |
| 873 } | 876 } |
| 874 | 877 |
| 875 GrDrawContext* drawContext = context->drawContext(); | 878 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), rec
t, inverse); |
| 876 if (drawContext) { | 879 return true; |
| 877 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(),
rect, inverse); | |
| 878 return true; | |
| 879 } | |
| 880 | |
| 881 return false; | |
| 882 } | 880 } |
| 883 | 881 |
| 884 class GrRRectBlurEffect : public GrFragmentProcessor { | 882 class GrRRectBlurEffect : public GrFragmentProcessor { |
| 885 public: | 883 public: |
| 886 | 884 |
| 887 static GrFragmentProcessor* Create(GrContext* context, float sigma, const Sk
RRect&); | 885 static GrFragmentProcessor* Create(GrContext* context, float sigma, const Sk
RRect&); |
| 888 | 886 |
| 889 virtual ~GrRRectBlurEffect() {}; | 887 virtual ~GrRRectBlurEffect() {}; |
| 890 const char* name() const override { return "GrRRectBlur"; } | 888 const char* name() const override { return "GrRRectBlur"; } |
| 891 | 889 |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1291 } else { | 1289 } else { |
| 1292 str->append("None"); | 1290 str->append("None"); |
| 1293 } | 1291 } |
| 1294 str->append("))"); | 1292 str->append("))"); |
| 1295 } | 1293 } |
| 1296 #endif | 1294 #endif |
| 1297 | 1295 |
| 1298 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1296 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 1299 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1297 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 1300 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1298 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |