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 | 9 |
10 #include "SkMaskFilter.h" | 10 #include "SkMaskFilter.h" |
11 #include "SkBlitter.h" | 11 #include "SkBlitter.h" |
12 #include "SkDraw.h" | 12 #include "SkDraw.h" |
13 #include "SkMaskCache.h" | |
13 #include "SkRasterClip.h" | 14 #include "SkRasterClip.h" |
14 #include "SkRRect.h" | 15 #include "SkRRect.h" |
15 #include "SkTypes.h" | 16 #include "SkTypes.h" |
16 | 17 |
17 #if SK_SUPPORT_GPU | 18 #if SK_SUPPORT_GPU |
18 #include "GrTexture.h" | 19 #include "GrTexture.h" |
19 #include "SkGr.h" | 20 #include "SkGr.h" |
20 #include "SkGrPixelRef.h" | 21 #include "SkGrPixelRef.h" |
21 #endif | 22 #endif |
22 | 23 |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 | 257 |
257 SkMask srcM, dstM; | 258 SkMask srcM, dstM; |
258 | 259 |
259 if (!SkDraw::DrawToMask(devPath, &clip.getBounds(), this, &matrix, &srcM, | 260 if (!SkDraw::DrawToMask(devPath, &clip.getBounds(), this, &matrix, &srcM, |
260 SkMask::kComputeBoundsAndRenderImage_CreateMode, | 261 SkMask::kComputeBoundsAndRenderImage_CreateMode, |
261 style)) { | 262 style)) { |
262 return false; | 263 return false; |
263 } | 264 } |
264 SkAutoMaskFreeImage autoSrc(srcM.fImage); | 265 SkAutoMaskFreeImage autoSrc(srcM.fImage); |
265 | 266 |
266 if (!this->filterMask(&dstM, srcM, matrix, NULL)) { | 267 BlurRec rec; |
267 return false; | 268 if (this->asABlur(&rec) && rectCount) { |
269 SkScalar scaledSigma = matrix.mapRadius(rec.fSigma); | |
270 if (!SkMaskCache::FindAndCopy(scaledSigma, rec.fStyle, rec.fQuality, | |
reed1
2015/01/08 15:51:21
I think it will be easier to read if we change thi
qiankun
2015/01/12 04:36:26
Done.
| |
271 rects, rectCount, &dstM)) { | |
272 if (!this->filterMask(&dstM, srcM, matrix, NULL)) { | |
273 return false; | |
274 } | |
275 SkMaskCache::AddAndCopy(scaledSigma, rec.fStyle, rec.fQuality, rects , rectCount, dstM); | |
276 } else { | |
277 // Compute the correct bounds of dst mask if dst mask is got from ca che. | |
278 SkMask tmpSrc, tmpDst; | |
279 tmpSrc = srcM; | |
280 tmpSrc.fImage = NULL; | |
281 if (!this->filterMask(&tmpDst, tmpSrc, matrix, NULL)) { | |
282 return false; | |
283 } | |
284 | |
285 // Fallback to original calculation if size of bounds is different w ith | |
reed1
2015/01/08 15:51:21
I'm afraid I still don't understand the scenario t
qiankun
2015/01/12 04:36:26
It was used to handle clipping bounds. Now, the ne
| |
286 // size of the cached mask. | |
287 if (dstM.fBounds.width() != tmpDst.fBounds.width() || | |
288 dstM.fBounds.height() != tmpDst.fBounds.height()) { | |
289 SkMask::FreeImage(dstM.fImage); | |
290 if (!this->filterMask(&dstM, srcM, matrix, NULL)) { | |
291 return false; | |
292 } | |
293 } else { | |
294 dstM.fBounds = tmpDst.fBounds; | |
295 } | |
296 } | |
297 } else { | |
298 if (!this->filterMask(&dstM, srcM, matrix, NULL)) { | |
299 return false; | |
300 } | |
268 } | 301 } |
302 | |
269 SkAutoMaskFreeImage autoDst(dstM.fImage); | 303 SkAutoMaskFreeImage autoDst(dstM.fImage); |
270 | 304 |
271 // if we get here, we need to (possibly) resolve the clip and blitter | 305 // if we get here, we need to (possibly) resolve the clip and blitter |
272 SkAAClipBlitterWrapper wrapper(clip, blitter); | 306 SkAAClipBlitterWrapper wrapper(clip, blitter); |
273 blitter = wrapper.getBlitter(); | 307 blitter = wrapper.getBlitter(); |
274 | 308 |
275 SkRegion::Cliperator clipper(wrapper.getRgn(), dstM.fBounds); | 309 SkRegion::Cliperator clipper(wrapper.getRgn(), dstM.fBounds); |
276 | 310 |
277 if (!clipper.done()) { | 311 if (!clipper.done()) { |
278 const SkIRect& cr = clipper.rect(); | 312 const SkIRect& cr = clipper.rect(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
343 srcM.fRowBytes = 0; | 377 srcM.fRowBytes = 0; |
344 srcM.fFormat = SkMask::kA8_Format; | 378 srcM.fFormat = SkMask::kA8_Format; |
345 | 379 |
346 SkIPoint margin; // ignored | 380 SkIPoint margin; // ignored |
347 if (this->filterMask(&dstM, srcM, SkMatrix::I(), &margin)) { | 381 if (this->filterMask(&dstM, srcM, SkMatrix::I(), &margin)) { |
348 dst->set(dstM.fBounds); | 382 dst->set(dstM.fBounds); |
349 } else { | 383 } else { |
350 dst->set(srcM.fBounds); | 384 dst->set(srcM.fBounds); |
351 } | 385 } |
352 } | 386 } |
OLD | NEW |