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

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

Issue 2214163003: Minor clean up related to blur mask filters (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add comment Created 4 years, 4 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 | « gm/occludedrrectblur.cpp ('k') | src/gpu/SkGpuDevice.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 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBlurMaskFilter.h" 8 #include "SkBlurMaskFilter.h"
9 #include "SkBlurMask.h" 9 #include "SkBlurMask.h"
10 #include "SkGpuBlurUtils.h" 10 #include "SkGpuBlurUtils.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 82
83 FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, 83 FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&,
84 const SkIRect& clipBounds, 84 const SkIRect& clipBounds,
85 NinePatch*) const override; 85 NinePatch*) const override;
86 86
87 bool filterRectMask(SkMask* dstM, const SkRect& r, const SkMatrix& matrix, 87 bool filterRectMask(SkMask* dstM, const SkRect& r, const SkMatrix& matrix,
88 SkIPoint* margin, SkMask::CreateMode createMode) const; 88 SkIPoint* margin, SkMask::CreateMode createMode) const;
89 bool filterRRectMask(SkMask* dstM, const SkRRect& r, const SkMatrix& matrix, 89 bool filterRRectMask(SkMask* dstM, const SkRRect& r, const SkMatrix& matrix,
90 SkIPoint* margin, SkMask::CreateMode createMode) const; 90 SkIPoint* margin, SkMask::CreateMode createMode) const;
91 91
92 bool ignoreXform() const {
93 return SkToBool(fBlurFlags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag );
94 }
95
92 private: 96 private:
93 // To avoid unseemly allocation requests (esp. for finite platforms like 97 // To avoid unseemly allocation requests (esp. for finite platforms like
94 // handset) we limit the radius so something manageable. (as opposed to 98 // handset) we limit the radius so something manageable. (as opposed to
95 // a request like 10,000) 99 // a request like 10,000)
96 static const SkScalar kMAX_BLUR_SIGMA; 100 static const SkScalar kMAX_BLUR_SIGMA;
97 101
98 SkScalar fSigma; 102 SkScalar fSigma;
99 SkBlurStyle fBlurStyle; 103 SkBlurStyle fBlurStyle;
100 uint32_t fBlurFlags; 104 uint32_t fBlurFlags;
101 105
102 SkBlurQuality getQuality() const { 106 SkBlurQuality getQuality() const {
103 return (fBlurFlags & SkBlurMaskFilter::kHighQuality_BlurFlag) ? 107 return (fBlurFlags & SkBlurMaskFilter::kHighQuality_BlurFlag) ?
104 kHigh_SkBlurQuality : kLow_SkBlurQuality; 108 kHigh_SkBlurQuality : kLow_SkBlurQuality;
105 } 109 }
106 110
107 SkBlurMaskFilterImpl(SkReadBuffer&); 111 SkBlurMaskFilterImpl(SkReadBuffer&);
108 void flatten(SkWriteBuffer&) const override; 112 void flatten(SkWriteBuffer&) const override;
109 113
110 SkScalar computeXformedSigma(const SkMatrix& ctm) const { 114 SkScalar computeXformedSigma(const SkMatrix& ctm) const {
111 bool ignoreTransform = SkToBool(fBlurFlags & SkBlurMaskFilter::kIgnoreTr ansform_BlurFlag); 115 SkScalar xformedSigma = this->ignoreXform() ? fSigma : ctm.mapRadius(fSi gma);
112
113 SkScalar xformedSigma = ignoreTransform ? fSigma : ctm.mapRadius(fSigma) ;
114 return SkMinScalar(xformedSigma, kMAX_BLUR_SIGMA); 116 return SkMinScalar(xformedSigma, kMAX_BLUR_SIGMA);
115 } 117 }
116 118
117 friend class SkBlurMaskFilter; 119 friend class SkBlurMaskFilter;
118 120
119 typedef SkMaskFilter INHERITED; 121 typedef SkMaskFilter INHERITED;
120 }; 122 };
121 123
122 const SkScalar SkBlurMaskFilterImpl::kMAX_BLUR_SIGMA = SkIntToScalar(128); 124 const SkScalar SkBlurMaskFilterImpl::kMAX_BLUR_SIGMA = SkIntToScalar(128);
123 125
124 sk_sp<SkMaskFilter> SkBlurMaskFilter::Make(SkBlurStyle style, SkScalar sigma, ui nt32_t flags) { 126 sk_sp<SkMaskFilter> SkBlurMaskFilter::Make(SkBlurStyle style, SkScalar sigma, ui nt32_t flags) {
125 if (!SkScalarIsFinite(sigma) || sigma <= 0) { 127 if (!SkScalarIsFinite(sigma) || sigma <= 0) {
126 return nullptr; 128 return nullptr;
127 } 129 }
128 if ((unsigned)style > (unsigned)kLastEnum_SkBlurStyle) { 130 if ((unsigned)style > (unsigned)kLastEnum_SkBlurStyle) {
129 return nullptr; 131 return nullptr;
130 } 132 }
131 if (flags > SkBlurMaskFilter::kAll_BlurFlag) { 133 SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag);
132 return nullptr; 134 flags &= SkBlurMaskFilter::kAll_BlurFlag;
133 } 135
134 return sk_sp<SkMaskFilter>(new SkBlurMaskFilterImpl(sigma, style, flags)); 136 return sk_sp<SkMaskFilter>(new SkBlurMaskFilterImpl(sigma, style, flags));
135 } 137 }
136 138
137 /////////////////////////////////////////////////////////////////////////////// 139 ///////////////////////////////////////////////////////////////////////////////
138 140
139 SkBlurMaskFilterImpl::SkBlurMaskFilterImpl(SkScalar sigma, SkBlurStyle style, ui nt32_t flags) 141 SkBlurMaskFilterImpl::SkBlurMaskFilterImpl(SkScalar sigma, SkBlurStyle style, ui nt32_t flags)
140 : fSigma(sigma) 142 : fSigma(sigma)
141 , fBlurStyle(style) 143 , fBlurStyle(style)
142 , fBlurFlags(flags) { 144 , fBlurFlags(flags) {
143 SkASSERT(fSigma > 0); 145 SkASSERT(fSigma > 0);
144 SkASSERT((unsigned)style <= kLastEnum_SkBlurStyle); 146 SkASSERT((unsigned)style <= kLastEnum_SkBlurStyle);
145 SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag); 147 SkASSERT(flags <= SkBlurMaskFilter::kAll_BlurFlag);
146 } 148 }
147 149
148 SkMask::Format SkBlurMaskFilterImpl::getFormat() const { 150 SkMask::Format SkBlurMaskFilterImpl::getFormat() const {
149 return SkMask::kA8_Format; 151 return SkMask::kA8_Format;
150 } 152 }
151 153
152 bool SkBlurMaskFilterImpl::asABlur(BlurRec* rec) const { 154 bool SkBlurMaskFilterImpl::asABlur(BlurRec* rec) const {
153 if (fBlurFlags & SkBlurMaskFilter::kIgnoreTransform_BlurFlag) { 155 if (this->ignoreXform()) {
154 return false; 156 return false;
155 } 157 }
156 158
157 if (rec) { 159 if (rec) {
158 rec->fSigma = fSigma; 160 rec->fSigma = fSigma;
159 rec->fStyle = fBlurStyle; 161 rec->fStyle = fBlurStyle;
160 rec->fQuality = this->getQuality(); 162 rec->fQuality = this->getQuality();
161 } 163 }
162 return true; 164 return true;
163 } 165 }
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 1164
1163 if (fBlurStyle != kNormal_SkBlurStyle) { 1165 if (fBlurStyle != kNormal_SkBlurStyle) {
1164 return false; 1166 return false;
1165 } 1167 }
1166 1168
1167 if (!strokeRec.isFillStyle()) { 1169 if (!strokeRec.isFillStyle()) {
1168 return false; 1170 return false;
1169 } 1171 }
1170 1172
1171 SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); 1173 SkScalar xformedSigma = this->computeXformedSigma(viewMatrix);
1172 float extra=3.f*SkScalarCeilToScalar(xformedSigma-1/6.0f);
1173
1174 SkRect proxyRect = rrect.rect();
1175 proxyRect.outset(extra, extra);
1176 1174
1177 sk_sp<GrFragmentProcessor> fp(GrRRectBlurEffect::Make(texProvider, xformedSi gma, rrect)); 1175 sk_sp<GrFragmentProcessor> fp(GrRRectBlurEffect::Make(texProvider, xformedSi gma, rrect));
1178 if (!fp) { 1176 if (!fp) {
1179 return false; 1177 return false;
1180 } 1178 }
1181 1179
1182 grp->addCoverageFragmentProcessor(std::move(fp)); 1180 grp->addCoverageFragmentProcessor(std::move(fp));
1183 1181
1184 SkMatrix inverse; 1182 SkMatrix inverse;
1185 if (!viewMatrix.invert(&inverse)) { 1183 if (!viewMatrix.invert(&inverse)) {
1186 return false; 1184 return false;
1187 } 1185 }
1188 1186
1187 float extra=3.f*SkScalarCeilToScalar(xformedSigma-1/6.0f);
1188
1189 SkRect proxyRect = rrect.rect();
1190 proxyRect.outset(extra, extra);
1191
1189 drawContext->fillRectWithLocalMatrix(clip, *grp, SkMatrix::I(), proxyRect, i nverse); 1192 drawContext->fillRectWithLocalMatrix(clip, *grp, SkMatrix::I(), proxyRect, i nverse);
1190 return true; 1193 return true;
1191 } 1194 }
1192 1195
1193 bool SkBlurMaskFilterImpl::canFilterMaskGPU(const SkRRect& devRRect, 1196 bool SkBlurMaskFilterImpl::canFilterMaskGPU(const SkRRect& devRRect,
1194 const SkIRect& clipBounds, 1197 const SkIRect& clipBounds,
1195 const SkMatrix& ctm, 1198 const SkMatrix& ctm,
1196 SkRect* maskRect) const { 1199 SkRect* maskRect) const {
1197 SkScalar xformedSigma = this->computeXformedSigma(ctm); 1200 SkScalar xformedSigma = this->computeXformedSigma(ctm);
1198 if (xformedSigma <= 0) { 1201 if (xformedSigma <= 0) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 } else { 1313 } else {
1311 str->append("None"); 1314 str->append("None");
1312 } 1315 }
1313 str->append("))"); 1316 str->append("))");
1314 } 1317 }
1315 #endif 1318 #endif
1316 1319
1317 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) 1320 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter)
1318 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) 1321 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl)
1319 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1322 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « gm/occludedrrectblur.cpp ('k') | src/gpu/SkGpuDevice.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698