Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(867)

Side by Side Diff: src/effects/SkBlurMaskFilter.cpp

Issue 1404823005: GrDrawContext now holds GrRenderTarget pointer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix overlength line Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkAlphaThresholdFilter.cpp ('k') | src/effects/SkDisplacementMapEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, 44 bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
45 SkIPoint* margin) const override; 45 SkIPoint* margin) const override;
46 46
47 #if SK_SUPPORT_GPU 47 #if SK_SUPPORT_GPU
48 bool canFilterMaskGPU(const SkRRect& devRRect, 48 bool canFilterMaskGPU(const SkRRect& devRRect,
49 const SkIRect& clipBounds, 49 const SkIRect& clipBounds,
50 const SkMatrix& ctm, 50 const SkMatrix& ctm,
51 SkRect* maskRect) const override; 51 SkRect* maskRect) const override;
52 bool directFilterMaskGPU(GrTextureProvider* texProvider, 52 bool directFilterMaskGPU(GrTextureProvider* texProvider,
53 GrDrawContext* drawContext, 53 GrDrawContext* drawContext,
54 GrRenderTarget* rt,
55 GrPaint* grp, 54 GrPaint* grp,
56 const GrClip&, 55 const GrClip&,
57 const SkMatrix& viewMatrix, 56 const SkMatrix& viewMatrix,
58 const SkStrokeRec& strokeRec, 57 const SkStrokeRec& strokeRec,
59 const SkPath& path) const override; 58 const SkPath& path) const override;
60 bool directFilterRRectMaskGPU(GrTextureProvider* texProvider, 59 bool directFilterRRectMaskGPU(GrTextureProvider* texProvider,
61 GrDrawContext* drawContext, 60 GrDrawContext* drawContext,
62 GrRenderTarget* rt,
63 GrPaint* grp, 61 GrPaint* grp,
64 const GrClip&, 62 const GrClip&,
65 const SkMatrix& viewMatrix, 63 const SkMatrix& viewMatrix,
66 const SkStrokeRec& strokeRec, 64 const SkStrokeRec& strokeRec,
67 const SkRRect& rrect) const override; 65 const SkRRect& rrect) const override;
68 bool filterMaskGPU(GrTexture* src, 66 bool filterMaskGPU(GrTexture* src,
69 const SkMatrix& ctm, 67 const SkMatrix& ctm,
70 const SkRect& maskRect, 68 const SkRect& maskRect,
71 GrTexture** result, 69 GrTexture** result,
72 bool canOverwriteSrc) const override; 70 bool canOverwriteSrc) const override;
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 float sigma = d->fRandom->nextRangeF(3,8); 797 float sigma = d->fRandom->nextRangeF(3,8);
800 float width = d->fRandom->nextRangeF(200,300); 798 float width = d->fRandom->nextRangeF(200,300);
801 float height = d->fRandom->nextRangeF(200,300); 799 float height = d->fRandom->nextRangeF(200,300);
802 return GrRectBlurEffect::Create(d->fContext->textureProvider(), SkRect::Make WH(width, height), 800 return GrRectBlurEffect::Create(d->fContext->textureProvider(), SkRect::Make WH(width, height),
803 sigma); 801 sigma);
804 } 802 }
805 803
806 804
807 bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrTextureProvider* texProvider, 805 bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrTextureProvider* texProvider,
808 GrDrawContext* drawContext, 806 GrDrawContext* drawContext,
809 GrRenderTarget* rt,
810 GrPaint* grp, 807 GrPaint* grp,
811 const GrClip& clip, 808 const GrClip& clip,
812 const SkMatrix& viewMatrix, 809 const SkMatrix& viewMatrix,
813 const SkStrokeRec& strokeRec, 810 const SkStrokeRec& strokeRec,
814 const SkPath& path) const { 811 const SkPath& path) const {
815 SkASSERT(drawContext); 812 SkASSERT(drawContext);
816 813
817 if (fBlurStyle != kNormal_SkBlurStyle) { 814 if (fBlurStyle != kNormal_SkBlurStyle) {
818 return false; 815 return false;
819 } 816 }
(...skipping 27 matching lines...) Expand all
847 return false; 844 return false;
848 } 845 }
849 846
850 grp->addCoverageFragmentProcessor(fp); 847 grp->addCoverageFragmentProcessor(fp);
851 848
852 SkMatrix inverse; 849 SkMatrix inverse;
853 if (!viewMatrix.invert(&inverse)) { 850 if (!viewMatrix.invert(&inverse)) {
854 return false; 851 return false;
855 } 852 }
856 853
857 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), rec t, inverse); 854 drawContext->drawNonAARectWithLocalMatrix(clip, *grp, SkMatrix::I(), rect, i nverse);
858 return true; 855 return true;
859 } 856 }
860 857
861 ////////////////////////////////////////////////////////////////////////////// 858 //////////////////////////////////////////////////////////////////////////////
862 859
863 class GrRRectBlurEffect : public GrFragmentProcessor { 860 class GrRRectBlurEffect : public GrFragmentProcessor {
864 public: 861 public:
865 862
866 static const GrFragmentProcessor* Create(GrTextureProvider*, float sigma, co nst SkRRect&); 863 static const GrFragmentProcessor* Create(GrTextureProvider*, float sigma, co nst SkRRect&);
867 864
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 void GrRRectBlurEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorK eyBuilder* b) const { 1091 void GrRRectBlurEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorK eyBuilder* b) const {
1095 GrGLRRectBlurEffect::GenKey(*this, caps, b); 1092 GrGLRRectBlurEffect::GenKey(*this, caps, b);
1096 } 1093 }
1097 1094
1098 GrGLFragmentProcessor* GrRRectBlurEffect::onCreateGLInstance() const { 1095 GrGLFragmentProcessor* GrRRectBlurEffect::onCreateGLInstance() const {
1099 return new GrGLRRectBlurEffect(*this); 1096 return new GrGLRRectBlurEffect(*this);
1100 } 1097 }
1101 1098
1102 bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrTextureProvider* texProvid er, 1099 bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrTextureProvider* texProvid er,
1103 GrDrawContext* drawContext, 1100 GrDrawContext* drawContext,
1104 GrRenderTarget* rt,
1105 GrPaint* grp, 1101 GrPaint* grp,
1106 const GrClip& clip, 1102 const GrClip& clip,
1107 const SkMatrix& viewMatrix, 1103 const SkMatrix& viewMatrix,
1108 const SkStrokeRec& strokeRec , 1104 const SkStrokeRec& strokeRec ,
1109 const SkRRect& rrect) const { 1105 const SkRRect& rrect) const {
1110 SkASSERT(drawContext); 1106 SkASSERT(drawContext);
1111 1107
1112 if (fBlurStyle != kNormal_SkBlurStyle) { 1108 if (fBlurStyle != kNormal_SkBlurStyle) {
1113 return false; 1109 return false;
1114 } 1110 }
(...skipping 14 matching lines...) Expand all
1129 return false; 1125 return false;
1130 } 1126 }
1131 1127
1132 grp->addCoverageFragmentProcessor(fp); 1128 grp->addCoverageFragmentProcessor(fp);
1133 1129
1134 SkMatrix inverse; 1130 SkMatrix inverse;
1135 if (!viewMatrix.invert(&inverse)) { 1131 if (!viewMatrix.invert(&inverse)) {
1136 return false; 1132 return false;
1137 } 1133 }
1138 1134
1139 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), pro xyRect, inverse); 1135 drawContext->drawNonAARectWithLocalMatrix(clip, *grp, SkMatrix::I(), proxyRe ct, inverse);
1140 return true; 1136 return true;
1141 } 1137 }
1142 1138
1143 bool SkBlurMaskFilterImpl::canFilterMaskGPU(const SkRRect& devRRect, 1139 bool SkBlurMaskFilterImpl::canFilterMaskGPU(const SkRRect& devRRect,
1144 const SkIRect& clipBounds, 1140 const SkIRect& clipBounds,
1145 const SkMatrix& ctm, 1141 const SkMatrix& ctm,
1146 SkRect* maskRect) const { 1142 SkRect* maskRect) const {
1147 SkScalar xformedSigma = this->computeXformedSigma(ctm); 1143 SkScalar xformedSigma = this->computeXformedSigma(ctm);
1148 if (xformedSigma <= 0) { 1144 if (xformedSigma <= 0) {
1149 return false; 1145 return false;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 } else if (kSolid_SkBlurStyle == fBlurStyle) { 1211 } else if (kSolid_SkBlurStyle == fBlurStyle) {
1216 // solid: dst = src + dst - src * dst 1212 // solid: dst = src + dst - src * dst
1217 // = src + (1 - src) * dst 1213 // = src + (1 - src) * dst
1218 paint.setCoverageSetOpXPFactory(SkRegion::kUnion_Op); 1214 paint.setCoverageSetOpXPFactory(SkRegion::kUnion_Op);
1219 } else if (kOuter_SkBlurStyle == fBlurStyle) { 1215 } else if (kOuter_SkBlurStyle == fBlurStyle) {
1220 // outer: dst = dst * (1 - src) 1216 // outer: dst = dst * (1 - src)
1221 // = 0 * src + (1 - src) * dst 1217 // = 0 * src + (1 - src) * dst
1222 paint.setCoverageSetOpXPFactory(SkRegion::kDifference_Op); 1218 paint.setCoverageSetOpXPFactory(SkRegion::kDifference_Op);
1223 } 1219 }
1224 1220
1225 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext()); 1221 SkAutoTUnref<GrDrawContext> drawContext(context->drawContext((*result)-> asRenderTarget()));
1226 if (!drawContext) { 1222 if (!drawContext) {
1227 return false; 1223 return false;
1228 } 1224 }
1229 1225
1230 drawContext->drawRect((*result)->asRenderTarget(), GrClip::WideOpen(), 1226 drawContext->drawRect(GrClip::WideOpen(), paint, SkMatrix::I(), clipRect );
1231 paint, SkMatrix::I(), clipRect);
1232 } 1227 }
1233 1228
1234 return true; 1229 return true;
1235 } 1230 }
1236 1231
1237 #endif // SK_SUPPORT_GPU 1232 #endif // SK_SUPPORT_GPU
1238 1233
1239 1234
1240 #ifndef SK_IGNORE_TO_STRING 1235 #ifndef SK_IGNORE_TO_STRING
1241 void SkBlurMaskFilterImpl::toString(SkString* str) const { 1236 void SkBlurMaskFilterImpl::toString(SkString* str) const {
(...skipping 20 matching lines...) Expand all
1262 } else { 1257 } else {
1263 str->append("None"); 1258 str->append("None");
1264 } 1259 }
1265 str->append("))"); 1260 str->append("))");
1266 } 1261 }
1267 #endif 1262 #endif
1268 1263
1269 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) 1264 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter)
1270 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) 1265 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl)
1271 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1266 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkAlphaThresholdFilter.cpp ('k') | src/effects/SkDisplacementMapEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698