| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrDefaultPathRenderer.h" | 8 #include "GrDefaultPathRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatchFlushState.h" | 10 #include "GrBatchFlushState.h" |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 BatchTracker fBatch; | 413 BatchTracker fBatch; |
| 414 SkSTArray<1, Geometry, true> fGeoData; | 414 SkSTArray<1, Geometry, true> fGeoData; |
| 415 | 415 |
| 416 typedef GrVertexBatch INHERITED; | 416 typedef GrVertexBatch INHERITED; |
| 417 }; | 417 }; |
| 418 | 418 |
| 419 bool GrDefaultPathRenderer::internalDrawPath(GrDrawContext* drawContext, | 419 bool GrDefaultPathRenderer::internalDrawPath(GrDrawContext* drawContext, |
| 420 const GrPaint& paint, | 420 const GrPaint& paint, |
| 421 const GrUserStencilSettings* userSt
encilSettings, | 421 const GrUserStencilSettings* userSt
encilSettings, |
| 422 const GrClip& clip, | 422 const GrClip& clip, |
| 423 GrColor color, | |
| 424 const SkMatrix& viewMatrix, | 423 const SkMatrix& viewMatrix, |
| 425 const GrShape& shape, | 424 const GrShape& shape, |
| 426 bool stencilOnly) { | 425 bool stencilOnly) { |
| 427 SkPath path; | 426 SkPath path; |
| 428 shape.asPath(&path); | 427 shape.asPath(&path); |
| 429 | 428 |
| 430 SkScalar hairlineCoverage; | 429 SkScalar hairlineCoverage; |
| 431 uint8_t newCoverage = 0xff; | 430 uint8_t newCoverage = 0xff; |
| 432 bool isHairline = false; | 431 bool isHairline = false; |
| 433 if (IsStrokeHairlineOrEquivalent(shape.style(), viewMatrix, &hairlineCoverag
e)) { | 432 if (IsStrokeHairlineOrEquivalent(shape.style(), viewMatrix, &hairlineCoverag
e)) { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 if (!viewMatrix.invert(&localMatrix)) { | 549 if (!viewMatrix.invert(&localMatrix)) { |
| 551 return false; | 550 return false; |
| 552 } | 551 } |
| 553 } | 552 } |
| 554 } else { | 553 } else { |
| 555 bounds = path.getBounds(); | 554 bounds = path.getBounds(); |
| 556 } | 555 } |
| 557 const SkMatrix& viewM = (reverse && viewMatrix.hasPerspective()) ? S
kMatrix::I() : | 556 const SkMatrix& viewM = (reverse && viewMatrix.hasPerspective()) ? S
kMatrix::I() : |
| 558 v
iewMatrix; | 557 v
iewMatrix; |
| 559 SkAutoTUnref<GrDrawBatch> batch( | 558 SkAutoTUnref<GrDrawBatch> batch( |
| 560 GrRectBatchFactory::CreateNonAAFill(color, viewM, bounds, nu
llptr, | 559 GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewM,
bounds, nullptr, |
| 561 &localMatrix)); | 560 &localMatrix)); |
| 562 | 561 |
| 563 GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(pa
int)); | 562 GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(pa
int)); |
| 564 pipelineBuilder.setDrawFace(drawFace[p]); | 563 pipelineBuilder.setDrawFace(drawFace[p]); |
| 565 if (passes[p]) { | 564 if (passes[p]) { |
| 566 pipelineBuilder.setUserStencil(passes[p]); | 565 pipelineBuilder.setUserStencil(passes[p]); |
| 567 } else { | 566 } else { |
| 568 pipelineBuilder.setUserStencil(userStencilSettings); | 567 pipelineBuilder.setUserStencil(userStencilSettings); |
| 569 } | 568 } |
| 570 | 569 |
| 571 drawContext->drawBatch(pipelineBuilder, clip, batch); | 570 drawContext->drawBatch(pipelineBuilder, clip, batch); |
| 572 } else { | 571 } else { |
| 573 SkAutoTUnref<GrDrawBatch> batch(new DefaultPathBatch(color, path, sr
cSpaceTol, | 572 SkAutoTUnref<GrDrawBatch> batch(new DefaultPathBatch(paint.getColor(
), path, |
| 573 srcSpaceTol, |
| 574 newCoverage, vi
ewMatrix, | 574 newCoverage, vi
ewMatrix, |
| 575 isHairline, dev
Bounds)); | 575 isHairline, dev
Bounds)); |
| 576 | 576 |
| 577 GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(pa
int)); | 577 GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(pa
int)); |
| 578 pipelineBuilder.setDrawFace(drawFace[p]); | 578 pipelineBuilder.setDrawFace(drawFace[p]); |
| 579 if (passes[p]) { | 579 if (passes[p]) { |
| 580 pipelineBuilder.setUserStencil(passes[p]); | 580 pipelineBuilder.setUserStencil(passes[p]); |
| 581 } else { | 581 } else { |
| 582 pipelineBuilder.setUserStencil(userStencilSettings); | 582 pipelineBuilder.setUserStencil(userStencilSettings); |
| 583 } | 583 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 598 IsStrokeHairlineOrEquivalent(args.fShape->style(), *args.fViewMatrix
, nullptr)); | 598 IsStrokeHairlineOrEquivalent(args.fShape->style(), *args.fViewMatrix
, nullptr)); |
| 599 } | 599 } |
| 600 | 600 |
| 601 bool GrDefaultPathRenderer::onDrawPath(const DrawPathArgs& args) { | 601 bool GrDefaultPathRenderer::onDrawPath(const DrawPathArgs& args) { |
| 602 GR_AUDIT_TRAIL_AUTO_FRAME(args.fDrawContext->auditTrail(), | 602 GR_AUDIT_TRAIL_AUTO_FRAME(args.fDrawContext->auditTrail(), |
| 603 "GrDefaultPathRenderer::onDrawPath"); | 603 "GrDefaultPathRenderer::onDrawPath"); |
| 604 return this->internalDrawPath(args.fDrawContext, | 604 return this->internalDrawPath(args.fDrawContext, |
| 605 *args.fPaint, | 605 *args.fPaint, |
| 606 args.fUserStencilSettings, | 606 args.fUserStencilSettings, |
| 607 *args.fClip, | 607 *args.fClip, |
| 608 args.fColor, | |
| 609 *args.fViewMatrix, | 608 *args.fViewMatrix, |
| 610 *args.fShape, | 609 *args.fShape, |
| 611 false); | 610 false); |
| 612 } | 611 } |
| 613 | 612 |
| 614 void GrDefaultPathRenderer::onStencilPath(const StencilPathArgs& args) { | 613 void GrDefaultPathRenderer::onStencilPath(const StencilPathArgs& args) { |
| 615 GR_AUDIT_TRAIL_AUTO_FRAME(args.fDrawContext->auditTrail(), | 614 GR_AUDIT_TRAIL_AUTO_FRAME(args.fDrawContext->auditTrail(), |
| 616 "GrDefaultPathRenderer::onStencilPath"); | 615 "GrDefaultPathRenderer::onStencilPath"); |
| 617 SkASSERT(!args.fShape->inverseFilled()); | 616 SkASSERT(!args.fShape->inverseFilled()); |
| 618 | 617 |
| 619 GrPaint paint; | 618 GrPaint paint; |
| 620 paint.setXPFactory(GrDisableColorXPFactory::Make()); | 619 paint.setXPFactory(GrDisableColorXPFactory::Make()); |
| 621 paint.setAntiAlias(args.fIsAA); | 620 paint.setAntiAlias(args.fIsAA); |
| 622 | 621 |
| 623 this->internalDrawPath(args.fDrawContext, paint, &GrUserStencilSettings::kUn
used, *args.fClip, | 622 this->internalDrawPath(args.fDrawContext, paint, &GrUserStencilSettings::kUn
used, *args.fClip, |
| 624 GrColor_WHITE, *args.fViewMatrix, *args.fShape, true)
; | 623 *args.fViewMatrix, *args.fShape, true); |
| 625 } | 624 } |
| 626 | 625 |
| 627 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 626 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 628 | 627 |
| 629 #ifdef GR_TEST_UTILS | 628 #ifdef GR_TEST_UTILS |
| 630 | 629 |
| 631 DRAW_BATCH_TEST_DEFINE(DefaultPathBatch) { | 630 DRAW_BATCH_TEST_DEFINE(DefaultPathBatch) { |
| 632 GrColor color = GrRandomColor(random); | 631 GrColor color = GrRandomColor(random); |
| 633 SkMatrix viewMatrix = GrTest::TestMatrix(random); | 632 SkMatrix viewMatrix = GrTest::TestMatrix(random); |
| 634 | 633 |
| 635 // For now just hairlines because the other types of draws require two batch
es. | 634 // For now just hairlines because the other types of draws require two batch
es. |
| 636 // TODO we should figure out a way to combine the stencil and cover steps in
to one batch | 635 // TODO we should figure out a way to combine the stencil and cover steps in
to one batch |
| 637 GrStyle style(SkStrokeRec::kHairline_InitStyle); | 636 GrStyle style(SkStrokeRec::kHairline_InitStyle); |
| 638 SkPath path = GrTest::TestPath(random); | 637 SkPath path = GrTest::TestPath(random); |
| 639 | 638 |
| 640 // Compute srcSpaceTol | 639 // Compute srcSpaceTol |
| 641 SkRect bounds = path.getBounds(); | 640 SkRect bounds = path.getBounds(); |
| 642 SkScalar tol = GrPathUtils::kDefaultTolerance; | 641 SkScalar tol = GrPathUtils::kDefaultTolerance; |
| 643 SkScalar srcSpaceTol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, bou
nds); | 642 SkScalar srcSpaceTol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, bou
nds); |
| 644 | 643 |
| 645 viewMatrix.mapRect(&bounds); | 644 viewMatrix.mapRect(&bounds); |
| 646 uint8_t coverage = GrRandomCoverage(random); | 645 uint8_t coverage = GrRandomCoverage(random); |
| 647 return new DefaultPathBatch(color, path, srcSpaceTol, coverage, viewMatrix,
true, bounds); | 646 return new DefaultPathBatch(color, path, srcSpaceTol, coverage, viewMatrix,
true, bounds); |
| 648 } | 647 } |
| 649 | 648 |
| 650 #endif | 649 #endif |
| OLD | NEW |