OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
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 "GrBlurUtils.h" | 8 #include "GrBlurUtils.h" |
9 #include "GrDrawContext.h" | 9 #include "GrDrawContext.h" |
10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 matrix.setTranslate(-maskRect.fLeft, -maskRect.fTop); | 36 matrix.setTranslate(-maskRect.fLeft, -maskRect.fTop); |
37 matrix.postIDiv(mask->width(), mask->height()); | 37 matrix.postIDiv(mask->width(), mask->height()); |
38 | 38 |
39 grp->addCoverageProcessor(GrSimpleTextureEffect::Create(mask, matrix, | 39 grp->addCoverageProcessor(GrSimpleTextureEffect::Create(mask, matrix, |
40 kDevice_GrCoordSet))
->unref(); | 40 kDevice_GrCoordSet))
->unref(); |
41 | 41 |
42 SkMatrix inverse; | 42 SkMatrix inverse; |
43 if (!viewMatrix.invert(&inverse)) { | 43 if (!viewMatrix.invert(&inverse)) { |
44 return false; | 44 return false; |
45 } | 45 } |
| 46 |
| 47 drawContext->uses(mask); |
46 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), mas
kRect, inverse); | 48 drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), mas
kRect, inverse); |
47 return true; | 49 return true; |
48 } | 50 } |
49 | 51 |
50 static bool draw_with_mask_filter(GrDrawContext* drawContext, | 52 static bool draw_with_mask_filter(GrDrawContext* drawContext, |
51 GrTextureProvider* textureProvider, | 53 GrTextureProvider* textureProvider, |
52 GrRenderTarget* rt, | 54 GrRenderTarget* rt, |
53 const GrClip& clipData, | 55 const GrClip& clipData, |
54 const SkMatrix& viewMatrix, | 56 const SkMatrix& viewMatrix, |
55 const SkPath& devPath, | 57 const SkPath& devPath, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 118 } |
117 | 119 |
118 GrTexture* mask = context->textureProvider()->refScratchTexture( | 120 GrTexture* mask = context->textureProvider()->refScratchTexture( |
119 desc, GrTextureProvider::kApprox_ScratchTexMatch); | 121 desc, GrTextureProvider::kApprox_ScratchTexMatch); |
120 if (NULL == mask) { | 122 if (NULL == mask) { |
121 return NULL; | 123 return NULL; |
122 } | 124 } |
123 | 125 |
124 SkRect clipRect = SkRect::MakeWH(maskRect.width(), maskRect.height()); | 126 SkRect clipRect = SkRect::MakeWH(maskRect.width(), maskRect.height()); |
125 | 127 |
126 GrDrawContext* drawContext = context->drawContext(); | 128 // TODO: need to propagate this drawcontext back to the caller |
| 129 GrDrawContext* drawContext = context->drawContext(mask->asRenderTarget()); |
127 if (!drawContext) { | 130 if (!drawContext) { |
128 return NULL; | 131 return NULL; |
129 } | 132 } |
130 | 133 |
131 drawContext->clear(mask->asRenderTarget(), NULL, 0x0, true); | 134 drawContext->clear(mask->asRenderTarget(), NULL, 0x0, true); |
132 | 135 |
133 GrPaint tempPaint; | 136 GrPaint tempPaint; |
134 tempPaint.setAntiAlias(doAA); | 137 tempPaint.setAntiAlias(doAA); |
135 tempPaint.setCoverageSetOpXPFactory(SkRegion::kReplace_Op); | 138 tempPaint.setCoverageSetOpXPFactory(SkRegion::kReplace_Op); |
136 | 139 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 viewMatrix, | 238 viewMatrix, |
236 &maskRect)) { | 239 &maskRect)) { |
237 SkIRect finalIRect; | 240 SkIRect finalIRect; |
238 maskRect.roundOut(&finalIRect); | 241 maskRect.roundOut(&finalIRect); |
239 if (clip_bounds_quick_reject(clipBounds, finalIRect)) { | 242 if (clip_bounds_quick_reject(clipBounds, finalIRect)) { |
240 // clipped out | 243 // clipped out |
241 return; | 244 return; |
242 } | 245 } |
243 | 246 |
244 if (paint.getMaskFilter()->directFilterMaskGPU(context, | 247 if (paint.getMaskFilter()->directFilterMaskGPU(context, |
| 248 drawContext, |
245 renderTarget, | 249 renderTarget, |
246 &grPaint, | 250 &grPaint, |
247 clip, | 251 clip, |
248 viewMatrix, | 252 viewMatrix, |
249 strokeInfo, | 253 strokeInfo, |
250 *devPathPtr)) { | 254 *devPathPtr)) { |
251 // the mask filter was able to draw itself directly, so there's
nothing | 255 // the mask filter was able to draw itself directly, so there's
nothing |
252 // left to do. | 256 // left to do. |
253 return; | 257 return; |
254 } | 258 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 SkPaint::kFill_Sty
le; | 291 SkPaint::kFill_Sty
le; |
288 draw_with_mask_filter(drawContext, context->textureProvider(), renderTar
get, | 292 draw_with_mask_filter(drawContext, context->textureProvider(), renderTar
get, |
289 clip, viewMatrix, *devPathPtr, | 293 clip, viewMatrix, *devPathPtr, |
290 paint.getMaskFilter(), clipBounds, &grPaint, style
); | 294 paint.getMaskFilter(), clipBounds, &grPaint, style
); |
291 return; | 295 return; |
292 } | 296 } |
293 | 297 |
294 drawContext->drawPath(renderTarget, clip, grPaint, viewMatrix, *pathPtr, str
okeInfo); | 298 drawContext->drawPath(renderTarget, clip, grPaint, viewMatrix, *pathPtr, str
okeInfo); |
295 } | 299 } |
296 | 300 |
OLD | NEW |