| 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 "GrTessellatingPathRenderer.h" | 8 #include "GrTessellatingPathRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
| (...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 } | 1335 } |
| 1336 | 1336 |
| 1337 GrPathRenderer::StencilSupport GrTessellatingPathRenderer::onGetStencilSupport( | 1337 GrPathRenderer::StencilSupport GrTessellatingPathRenderer::onGetStencilSupport( |
| 1338 const GrDrawTarget*, | 1338 const GrDrawTarget*, |
| 1339 const GrPipelineBuil
der*, | 1339 const GrPipelineBuil
der*, |
| 1340 const SkPath&, | 1340 const SkPath&, |
| 1341 const GrStrokeInfo&)
const { | 1341 const GrStrokeInfo&)
const { |
| 1342 return GrPathRenderer::kNoSupport_StencilSupport; | 1342 return GrPathRenderer::kNoSupport_StencilSupport; |
| 1343 } | 1343 } |
| 1344 | 1344 |
| 1345 bool GrTessellatingPathRenderer::canDrawPath(const GrDrawTarget* target, | 1345 bool GrTessellatingPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) cons
t { |
| 1346 const GrPipelineBuilder* pipelineBu
ilder, | |
| 1347 const SkMatrix& viewMatrix, | |
| 1348 const SkPath& path, | |
| 1349 const GrStrokeInfo& stroke, | |
| 1350 bool antiAlias) const { | |
| 1351 // This path renderer can draw all fill styles, but does not do antialiasing
. It can do convex | 1346 // This path renderer can draw all fill styles, but does not do antialiasing
. It can do convex |
| 1352 // and concave paths, but we'll leave the convex ones to simpler algorithms. | 1347 // and concave paths, but we'll leave the convex ones to simpler algorithms. |
| 1353 return stroke.isFillStyle() && !antiAlias && !path.isConvex(); | 1348 return args.fStroke->isFillStyle() && !args.fAntiAlias && !args.fPath->isCon
vex(); |
| 1354 } | 1349 } |
| 1355 | 1350 |
| 1356 class TessellatingPathBatch : public GrBatch { | 1351 class TessellatingPathBatch : public GrBatch { |
| 1357 public: | 1352 public: |
| 1358 | 1353 |
| 1359 static GrBatch* Create(const GrColor& color, | 1354 static GrBatch* Create(const GrColor& color, |
| 1360 const SkPath& path, | 1355 const SkPath& path, |
| 1361 const SkMatrix& viewMatrix, | 1356 const SkMatrix& viewMatrix, |
| 1362 SkRect clipBounds) { | 1357 SkRect clipBounds) { |
| 1363 return SkNEW_ARGS(TessellatingPathBatch, (color, path, viewMatrix, clipB
ounds)); | 1358 return SkNEW_ARGS(TessellatingPathBatch, (color, path, viewMatrix, clipB
ounds)); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1482 viewMatrix.mapRect(&fBounds); | 1477 viewMatrix.mapRect(&fBounds); |
| 1483 } | 1478 } |
| 1484 | 1479 |
| 1485 GrColor fColor; | 1480 GrColor fColor; |
| 1486 SkPath fPath; | 1481 SkPath fPath; |
| 1487 SkMatrix fViewMatrix; | 1482 SkMatrix fViewMatrix; |
| 1488 SkRect fClipBounds; // in source space | 1483 SkRect fClipBounds; // in source space |
| 1489 GrPipelineInfo fPipelineInfo; | 1484 GrPipelineInfo fPipelineInfo; |
| 1490 }; | 1485 }; |
| 1491 | 1486 |
| 1492 bool GrTessellatingPathRenderer::onDrawPath(GrDrawTarget* target, | 1487 bool GrTessellatingPathRenderer::onDrawPath(const DrawPathArgs& args) { |
| 1493 GrPipelineBuilder* pipelineBuilder, | 1488 SkASSERT(!args.fAntiAlias); |
| 1494 GrColor color, | 1489 const GrRenderTarget* rt = args.fPipelineBuilder->getRenderTarget(); |
| 1495 const SkMatrix& viewM, | |
| 1496 const SkPath& path, | |
| 1497 const GrStrokeInfo&, | |
| 1498 bool antiAlias) { | |
| 1499 SkASSERT(!antiAlias); | |
| 1500 const GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | |
| 1501 if (NULL == rt) { | 1490 if (NULL == rt) { |
| 1502 return false; | 1491 return false; |
| 1503 } | 1492 } |
| 1504 | 1493 |
| 1505 SkIRect clipBoundsI; | 1494 SkIRect clipBoundsI; |
| 1506 pipelineBuilder->clip().getConservativeBounds(rt, &clipBoundsI); | 1495 args.fPipelineBuilder->clip().getConservativeBounds(rt, &clipBoundsI); |
| 1507 SkRect clipBounds = SkRect::Make(clipBoundsI); | 1496 SkRect clipBounds = SkRect::Make(clipBoundsI); |
| 1508 SkMatrix vmi; | 1497 SkMatrix vmi; |
| 1509 if (!viewM.invert(&vmi)) { | 1498 if (!args.fViewMatrix->invert(&vmi)) { |
| 1510 return false; | 1499 return false; |
| 1511 } | 1500 } |
| 1512 vmi.mapRect(&clipBounds); | 1501 vmi.mapRect(&clipBounds); |
| 1513 SkAutoTUnref<GrBatch> batch(TessellatingPathBatch::Create(color, path, viewM
, clipBounds)); | 1502 SkAutoTUnref<GrBatch> batch(TessellatingPathBatch::Create(args.fColor, *args
.fPath, |
| 1514 target->drawBatch(*pipelineBuilder, batch); | 1503 *args.fViewMatrix,
clipBounds)); |
| 1504 args.fTarget->drawBatch(*args.fPipelineBuilder, batch); |
| 1515 | 1505 |
| 1516 return true; | 1506 return true; |
| 1517 } | 1507 } |
| 1518 | 1508 |
| 1519 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 1509 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 1520 | 1510 |
| 1521 #ifdef GR_TEST_UTILS | 1511 #ifdef GR_TEST_UTILS |
| 1522 | 1512 |
| 1523 BATCH_TEST_DEFINE(TesselatingPathBatch) { | 1513 BATCH_TEST_DEFINE(TesselatingPathBatch) { |
| 1524 GrColor color = GrRandomColor(random); | 1514 GrColor color = GrRandomColor(random); |
| 1525 SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random); | 1515 SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random); |
| 1526 SkPath path = GrTest::TestPath(random); | 1516 SkPath path = GrTest::TestPath(random); |
| 1527 SkRect clipBounds = GrTest::TestRect(random); | 1517 SkRect clipBounds = GrTest::TestRect(random); |
| 1528 SkMatrix vmi; | 1518 SkMatrix vmi; |
| 1529 bool result = viewMatrix.invert(&vmi); | 1519 bool result = viewMatrix.invert(&vmi); |
| 1530 if (!result) { | 1520 if (!result) { |
| 1531 SkFAIL("Cannot invert matrix\n"); | 1521 SkFAIL("Cannot invert matrix\n"); |
| 1532 } | 1522 } |
| 1533 vmi.mapRect(&clipBounds); | 1523 vmi.mapRect(&clipBounds); |
| 1534 return TessellatingPathBatch::Create(color, path, viewMatrix, clipBounds); | 1524 return TessellatingPathBatch::Create(color, path, viewMatrix, clipBounds); |
| 1535 } | 1525 } |
| 1536 | 1526 |
| 1537 #endif | 1527 #endif |
| OLD | NEW |