OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 Google Inc. |
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 "GrAALinearizingConvexPathRenderer.h" | 9 #include "GrAALinearizingConvexPathRenderer.h" |
10 | 10 |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 // The thicker the stroke, the harder it is to produce high-quality results usin
g tessellation. For | 33 // The thicker the stroke, the harder it is to produce high-quality results usin
g tessellation. For |
34 // the time being, we simply drop back to software rendering above this stroke w
idth. | 34 // the time being, we simply drop back to software rendering above this stroke w
idth. |
35 static const SkScalar kMaxStrokeWidth = 20.0; | 35 static const SkScalar kMaxStrokeWidth = 20.0; |
36 | 36 |
37 GrAALinearizingConvexPathRenderer::GrAALinearizingConvexPathRenderer() { | 37 GrAALinearizingConvexPathRenderer::GrAALinearizingConvexPathRenderer() { |
38 } | 38 } |
39 | 39 |
40 /////////////////////////////////////////////////////////////////////////////// | 40 /////////////////////////////////////////////////////////////////////////////// |
41 | 41 |
42 bool GrAALinearizingConvexPathRenderer::canDrawPath(const GrDrawTarget* target, | 42 bool GrAALinearizingConvexPathRenderer::onCanDrawPath(const CanDrawPathArgs& arg
s) const { |
43 const GrPipelineBuilder*, | 43 if (!args.fAntiAlias) { |
44 const SkMatrix& viewMatrix, | |
45 const SkPath& path, | |
46 const GrStrokeInfo& stroke, | |
47 bool antiAlias) const { | |
48 if (!antiAlias) { | |
49 return false; | 44 return false; |
50 } | 45 } |
51 if (path.isInverseFillType()) { | 46 if (args.fPath->isInverseFillType()) { |
52 return false; | 47 return false; |
53 } | 48 } |
54 if (!path.isConvex()) { | 49 if (!args.fPath->isConvex()) { |
55 return false; | 50 return false; |
56 } | 51 } |
57 if (stroke.getStyle() == SkStrokeRec::kStroke_Style) { | 52 if (args.fStroke->getStyle() == SkStrokeRec::kStroke_Style) { |
58 return viewMatrix.isSimilarity() && stroke.getWidth() >= 1.0f && | 53 return args.fViewMatrix->isSimilarity() && args.fStroke->getWidth() >= 1
.0f && |
59 stroke.getWidth() <= kMaxStrokeWidth && !stroke.isDashed() && | 54 args.fStroke->getWidth() <= kMaxStrokeWidth && !args.fStroke->is
Dashed() && |
60 SkPathPriv::LastVerbIsClose(path) && stroke.getJoin() != SkPaint
::Join::kRound_Join; | 55 SkPathPriv::LastVerbIsClose(*args.fPath) && |
| 56 args.fStroke->getJoin() != SkPaint::Join::kRound_Join; |
61 } | 57 } |
62 return stroke.getStyle() == SkStrokeRec::kFill_Style; | 58 return args.fStroke->getStyle() == SkStrokeRec::kFill_Style; |
63 } | 59 } |
64 | 60 |
65 // extract the result vertices and indices from the GrAAConvexTessellator | 61 // extract the result vertices and indices from the GrAAConvexTessellator |
66 static void extract_verts(const GrAAConvexTessellator& tess, | 62 static void extract_verts(const GrAAConvexTessellator& tess, |
67 void* vertices, | 63 void* vertices, |
68 size_t vertexStride, | 64 size_t vertexStride, |
69 GrColor color, | 65 GrColor color, |
70 uint16_t firstIndex, | 66 uint16_t firstIndex, |
71 uint16_t* idxs, | 67 uint16_t* idxs, |
72 bool tweakAlphaForCoverage) { | 68 bool tweakAlphaForCoverage) { |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 bool fColorIgnored; | 292 bool fColorIgnored; |
297 bool fCoverageIgnored; | 293 bool fCoverageIgnored; |
298 bool fLinesOnly; | 294 bool fLinesOnly; |
299 bool fCanTweakAlphaForCoverage; | 295 bool fCanTweakAlphaForCoverage; |
300 }; | 296 }; |
301 | 297 |
302 BatchTracker fBatch; | 298 BatchTracker fBatch; |
303 SkSTArray<1, Geometry, true> fGeoData; | 299 SkSTArray<1, Geometry, true> fGeoData; |
304 }; | 300 }; |
305 | 301 |
306 bool GrAALinearizingConvexPathRenderer::onDrawPath(GrDrawTarget* target, | 302 bool GrAALinearizingConvexPathRenderer::onDrawPath(const DrawPathArgs& args) { |
307 GrPipelineBuilder* pipelineBu
ilder, | 303 if (args.fPath->isEmpty()) { |
308 GrColor color, | |
309 const SkMatrix& vm, | |
310 const SkPath& path, | |
311 const GrStrokeInfo& stroke, | |
312 bool antiAlias) { | |
313 if (path.isEmpty()) { | |
314 return true; | 304 return true; |
315 } | 305 } |
316 AAFlatteningConvexPathBatch::Geometry geometry; | 306 AAFlatteningConvexPathBatch::Geometry geometry; |
317 geometry.fColor = color; | 307 geometry.fColor = args.fColor; |
318 geometry.fViewMatrix = vm; | 308 geometry.fViewMatrix = *args.fViewMatrix; |
319 geometry.fPath = path; | 309 geometry.fPath = *args.fPath; |
320 geometry.fStrokeWidth = stroke.isFillStyle() ? -1.0f : stroke.getWidth(); | 310 geometry.fStrokeWidth = args.fStroke->isFillStyle() ? -1.0f : args.fStroke->
getWidth(); |
321 geometry.fJoin = stroke.isFillStyle() ? SkPaint::Join::kMiter_Join : stroke.
getJoin(); | 311 geometry.fJoin = args.fStroke->isFillStyle() ? SkPaint::Join::kMiter_Join : |
322 geometry.fMiterLimit = stroke.getMiter(); | 312 args.fStroke->getJoin(); |
| 313 geometry.fMiterLimit = args.fStroke->getMiter(); |
323 | 314 |
324 SkAutoTUnref<GrBatch> batch(AAFlatteningConvexPathBatch::Create(geometry)); | 315 SkAutoTUnref<GrBatch> batch(AAFlatteningConvexPathBatch::Create(geometry)); |
325 target->drawBatch(*pipelineBuilder, batch); | 316 args.fTarget->drawBatch(*args.fPipelineBuilder, batch); |
326 | 317 |
327 return true; | 318 return true; |
328 } | 319 } |
329 | 320 |
330 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 321 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
331 | 322 |
332 #ifdef GR_TEST_UTILS | 323 #ifdef GR_TEST_UTILS |
333 | 324 |
334 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) { | 325 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) { |
335 AAFlatteningConvexPathBatch::Geometry geometry; | 326 AAFlatteningConvexPathBatch::Geometry geometry; |
336 geometry.fColor = GrRandomColor(random); | 327 geometry.fColor = GrRandomColor(random); |
337 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); | 328 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); |
338 geometry.fPath = GrTest::TestPathConvex(random); | 329 geometry.fPath = GrTest::TestPathConvex(random); |
339 | 330 |
340 return AAFlatteningConvexPathBatch::Create(geometry); | 331 return AAFlatteningConvexPathBatch::Create(geometry); |
341 } | 332 } |
342 | 333 |
343 #endif | 334 #endif |
OLD | NEW |