OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 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 "GrAAConvexPathRenderer.h" | 9 #include "GrAAConvexPathRenderer.h" |
10 | 10 |
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 const BatchTracker& mine = m.cast<BatchTracker>(); | 620 const BatchTracker& mine = m.cast<BatchTracker>(); |
621 const BatchTracker& theirs = t.cast<BatchTracker>(); | 621 const BatchTracker& theirs = t.cast<BatchTracker>(); |
622 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, | 622 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, |
623 that, theirs.fUsesLocalCoords) && | 623 that, theirs.fUsesLocalCoords) && |
624 CanCombineOutput(mine.fInputColorType, mine.fColor, | 624 CanCombineOutput(mine.fInputColorType, mine.fColor, |
625 theirs.fInputColorType, theirs.fColor); | 625 theirs.fInputColorType, theirs.fColor); |
626 } | 626 } |
627 | 627 |
628 private: | 628 private: |
629 QuadEdgeEffect(GrColor color, const SkMatrix& localMatrix) | 629 QuadEdgeEffect(GrColor color, const SkMatrix& localMatrix) |
630 : INHERITED(color, false, localMatrix) { | 630 : INHERITED(color, SkMatrix::I(), localMatrix) { |
631 this->initClassID<QuadEdgeEffect>(); | 631 this->initClassID<QuadEdgeEffect>(); |
632 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); | 632 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); |
633 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); | 633 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); |
634 } | 634 } |
635 | 635 |
636 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { | 636 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { |
637 return true; | 637 return true; |
638 } | 638 } |
639 | 639 |
640 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { | 640 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { |
(...skipping 23 matching lines...) Expand all Loading... |
664 // Doesn't work without derivative instructions. | 664 // Doesn't work without derivative instructions. |
665 return caps.shaderDerivativeSupport() ? | 665 return caps.shaderDerivativeSupport() ? |
666 QuadEdgeEffect::Create(GrRandomColor(random), | 666 QuadEdgeEffect::Create(GrRandomColor(random), |
667 GrProcessorUnitTest::TestMatrix(random)) : NUL
L; | 667 GrProcessorUnitTest::TestMatrix(random)) : NUL
L; |
668 } | 668 } |
669 | 669 |
670 /////////////////////////////////////////////////////////////////////////////// | 670 /////////////////////////////////////////////////////////////////////////////// |
671 | 671 |
672 bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget* target, | 672 bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget* target, |
673 const GrDrawState*, | 673 const GrDrawState*, |
| 674 const SkMatrix& viewMatrix, |
674 const SkPath& path, | 675 const SkPath& path, |
675 const SkStrokeRec& stroke, | 676 const SkStrokeRec& stroke, |
676 bool antiAlias) const { | 677 bool antiAlias) const { |
677 return (target->caps()->shaderDerivativeSupport() && antiAlias && | 678 return (target->caps()->shaderDerivativeSupport() && antiAlias && |
678 stroke.isFillStyle() && !path.isInverseFillType() && path.isConvex()
); | 679 stroke.isFillStyle() && !path.isInverseFillType() && path.isConvex()
); |
679 } | 680 } |
680 | 681 |
681 bool GrAAConvexPathRenderer::onDrawPath(GrDrawTarget* target, | 682 bool GrAAConvexPathRenderer::onDrawPath(GrDrawTarget* target, |
682 GrDrawState* drawState, | 683 GrDrawState* drawState, |
683 GrColor color, | 684 GrColor color, |
| 685 const SkMatrix& vm, |
684 const SkPath& origPath, | 686 const SkPath& origPath, |
685 const SkStrokeRec&, | 687 const SkStrokeRec&, |
686 bool antiAlias) { | 688 bool antiAlias) { |
687 | 689 |
688 const SkPath* path = &origPath; | 690 const SkPath* path = &origPath; |
689 if (path->isEmpty()) { | 691 if (path->isEmpty()) { |
690 return true; | 692 return true; |
691 } | 693 } |
692 | 694 |
693 SkMatrix viewMatrix = drawState->getViewMatrix(); | 695 SkMatrix viewMatrix = vm; |
694 SkMatrix invert; | 696 SkMatrix invert; |
695 if (!viewMatrix.invert(&invert)) { | 697 if (!viewMatrix.invert(&invert)) { |
696 return false; | 698 return false; |
697 } | 699 } |
698 | 700 |
699 GrDrawState::AutoViewMatrixRestore avmr(drawState); | |
700 | |
701 // We use the fact that SkPath::transform path does subdivision based on | 701 // We use the fact that SkPath::transform path does subdivision based on |
702 // perspective. Otherwise, we apply the view matrix when copying to the | 702 // perspective. Otherwise, we apply the view matrix when copying to the |
703 // segment representation. | 703 // segment representation. |
704 SkPath tmpPath; | 704 SkPath tmpPath; |
705 if (viewMatrix.hasPerspective()) { | 705 if (viewMatrix.hasPerspective()) { |
706 origPath.transform(viewMatrix, &tmpPath); | 706 origPath.transform(viewMatrix, &tmpPath); |
707 path = &tmpPath; | 707 path = &tmpPath; |
708 viewMatrix = SkMatrix::I(); | 708 viewMatrix = SkMatrix::I(); |
709 } | 709 } |
710 | 710 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 vOffset, // start vertex | 764 vOffset, // start vertex |
765 0, // start index | 765 0, // start index |
766 draw.fVertexCnt, | 766 draw.fVertexCnt, |
767 draw.fIndexCnt, | 767 draw.fIndexCnt, |
768 &devBounds); | 768 &devBounds); |
769 vOffset += draw.fVertexCnt; | 769 vOffset += draw.fVertexCnt; |
770 } | 770 } |
771 | 771 |
772 return true; | 772 return true; |
773 } | 773 } |
OLD | NEW |