| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrDashingEffect.h" | 8 #include "GrDashingEffect.h" |
| 9 | 9 |
| 10 #include "../GrAARectRenderer.h" | 10 #include "../GrAARectRenderer.h" |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 static GrGeometryProcessor* Create(GrColor, | 473 static GrGeometryProcessor* Create(GrColor, |
| 474 GrPrimitiveEdgeType edgeType, | 474 GrPrimitiveEdgeType edgeType, |
| 475 const DashInfo& info, | 475 const DashInfo& info, |
| 476 SkScalar radius, | 476 SkScalar radius, |
| 477 const SkMatrix& localMatrix); | 477 const SkMatrix& localMatrix); |
| 478 | 478 |
| 479 virtual ~DashingCircleEffect(); | 479 virtual ~DashingCircleEffect(); |
| 480 | 480 |
| 481 const char* name() const SK_OVERRIDE { return "DashingCircleEffect"; } | 481 const char* name() const SK_OVERRIDE { return "DashingCircleEffect"; } |
| 482 | 482 |
| 483 const GrAttribute* inPosition() const { return fInPosition; } | 483 const Attribute* inPosition() const { return fInPosition; } |
| 484 | 484 |
| 485 const GrAttribute* inCoord() const { return fInCoord; } | 485 const Attribute* inCoord() const { return fInCoord; } |
| 486 | 486 |
| 487 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } | 487 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } |
| 488 | 488 |
| 489 SkScalar getRadius() const { return fRadius; } | 489 SkScalar getRadius() const { return fRadius; } |
| 490 | 490 |
| 491 SkScalar getCenterX() const { return fCenterX; } | 491 SkScalar getCenterX() const { return fCenterX; } |
| 492 | 492 |
| 493 SkScalar getIntervalLength() const { return fIntervalLength; } | 493 SkScalar getIntervalLength() const { return fIntervalLength; } |
| 494 | 494 |
| 495 virtual void getGLProcessorKey(const GrBatchTracker&, | 495 virtual void getGLProcessorKey(const GrBatchTracker&, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 507 | 507 |
| 508 private: | 508 private: |
| 509 DashingCircleEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& i
nfo, | 509 DashingCircleEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& i
nfo, |
| 510 SkScalar radius, const SkMatrix& localMatrix); | 510 SkScalar radius, const SkMatrix& localMatrix); |
| 511 | 511 |
| 512 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; | 512 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; |
| 513 | 513 |
| 514 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE; | 514 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE; |
| 515 | 515 |
| 516 GrPrimitiveEdgeType fEdgeType; | 516 GrPrimitiveEdgeType fEdgeType; |
| 517 const GrAttribute* fInPosition; | 517 const Attribute* fInPosition; |
| 518 const GrAttribute* fInCoord; | 518 const Attribute* fInCoord; |
| 519 SkScalar fIntervalLength; | 519 SkScalar fIntervalLength; |
| 520 SkScalar fRadius; | 520 SkScalar fRadius; |
| 521 SkScalar fCenterX; | 521 SkScalar fCenterX; |
| 522 | 522 |
| 523 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 523 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
| 524 | 524 |
| 525 typedef GrGeometryProcessor INHERITED; | 525 typedef GrGeometryProcessor INHERITED; |
| 526 }; | 526 }; |
| 527 | 527 |
| 528 ////////////////////////////////////////////////////////////////////////////// | 528 ////////////////////////////////////////////////////////////////////////////// |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); | 678 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); |
| 679 } | 679 } |
| 680 | 680 |
| 681 DashingCircleEffect::DashingCircleEffect(GrColor color, | 681 DashingCircleEffect::DashingCircleEffect(GrColor color, |
| 682 GrPrimitiveEdgeType edgeType, | 682 GrPrimitiveEdgeType edgeType, |
| 683 const DashInfo& info, | 683 const DashInfo& info, |
| 684 SkScalar radius, | 684 SkScalar radius, |
| 685 const SkMatrix& localMatrix) | 685 const SkMatrix& localMatrix) |
| 686 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { | 686 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { |
| 687 this->initClassID<DashingCircleEffect>(); | 687 this->initClassID<DashingCircleEffect>(); |
| 688 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); | 688 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 689 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr
ibType)); | 689 fInCoord = &this->addVertexAttrib(Attribute("inCoord", kVec2f_GrVertexAttrib
Type)); |
| 690 SkScalar onLen = info.fIntervals[0]; | 690 SkScalar onLen = info.fIntervals[0]; |
| 691 SkScalar offLen = info.fIntervals[1]; | 691 SkScalar offLen = info.fIntervals[1]; |
| 692 fIntervalLength = onLen + offLen; | 692 fIntervalLength = onLen + offLen; |
| 693 fRadius = radius; | 693 fRadius = radius; |
| 694 fCenterX = SkScalarHalf(offLen); | 694 fCenterX = SkScalarHalf(offLen); |
| 695 } | 695 } |
| 696 | 696 |
| 697 bool DashingCircleEffect::onIsEqual(const GrGeometryProcessor& other) const { | 697 bool DashingCircleEffect::onIsEqual(const GrGeometryProcessor& other) const { |
| 698 const DashingCircleEffect& dce = other.cast<DashingCircleEffect>(); | 698 const DashingCircleEffect& dce = other.cast<DashingCircleEffect>(); |
| 699 return (fEdgeType == dce.fEdgeType && | 699 return (fEdgeType == dce.fEdgeType && |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 static GrGeometryProcessor* Create(GrColor, | 767 static GrGeometryProcessor* Create(GrColor, |
| 768 GrPrimitiveEdgeType edgeType, | 768 GrPrimitiveEdgeType edgeType, |
| 769 const DashInfo& info, | 769 const DashInfo& info, |
| 770 SkScalar strokeWidth, | 770 SkScalar strokeWidth, |
| 771 const SkMatrix& localMatrix); | 771 const SkMatrix& localMatrix); |
| 772 | 772 |
| 773 virtual ~DashingLineEffect(); | 773 virtual ~DashingLineEffect(); |
| 774 | 774 |
| 775 const char* name() const SK_OVERRIDE { return "DashingEffect"; } | 775 const char* name() const SK_OVERRIDE { return "DashingEffect"; } |
| 776 | 776 |
| 777 const GrAttribute* inPosition() const { return fInPosition; } | 777 const Attribute* inPosition() const { return fInPosition; } |
| 778 | 778 |
| 779 const GrAttribute* inCoord() const { return fInCoord; } | 779 const Attribute* inCoord() const { return fInCoord; } |
| 780 | 780 |
| 781 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } | 781 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } |
| 782 | 782 |
| 783 const SkRect& getRect() const { return fRect; } | 783 const SkRect& getRect() const { return fRect; } |
| 784 | 784 |
| 785 SkScalar getIntervalLength() const { return fIntervalLength; } | 785 SkScalar getIntervalLength() const { return fIntervalLength; } |
| 786 | 786 |
| 787 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 787 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 788 const GrGLCaps& caps, | 788 const GrGLCaps& caps, |
| 789 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 789 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
| 790 | 790 |
| 791 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, | 791 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 792 const GrGLCaps&) const SK_O
VERRIDE; | 792 const GrGLCaps&) const SK_O
VERRIDE; |
| 793 | 793 |
| 794 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 794 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
| 795 | 795 |
| 796 bool onCanMakeEqual(const GrBatchTracker&, | 796 bool onCanMakeEqual(const GrBatchTracker&, |
| 797 const GrGeometryProcessor&, | 797 const GrGeometryProcessor&, |
| 798 const GrBatchTracker&) const SK_OVERRIDE; | 798 const GrBatchTracker&) const SK_OVERRIDE; |
| 799 | 799 |
| 800 private: | 800 private: |
| 801 DashingLineEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& inf
o, | 801 DashingLineEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& inf
o, |
| 802 SkScalar strokeWidth, const SkMatrix& localMatrix); | 802 SkScalar strokeWidth, const SkMatrix& localMatrix); |
| 803 | 803 |
| 804 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; | 804 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; |
| 805 | 805 |
| 806 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE; | 806 void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const SK_OVERRIDE; |
| 807 | 807 |
| 808 GrPrimitiveEdgeType fEdgeType; | 808 GrPrimitiveEdgeType fEdgeType; |
| 809 const GrAttribute* fInPosition; | 809 const Attribute* fInPosition; |
| 810 const GrAttribute* fInCoord; | 810 const Attribute* fInCoord; |
| 811 SkRect fRect; | 811 SkRect fRect; |
| 812 SkScalar fIntervalLength; | 812 SkScalar fIntervalLength; |
| 813 | 813 |
| 814 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 814 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
| 815 | 815 |
| 816 typedef GrGeometryProcessor INHERITED; | 816 typedef GrGeometryProcessor INHERITED; |
| 817 }; | 817 }; |
| 818 | 818 |
| 819 ////////////////////////////////////////////////////////////////////////////// | 819 ////////////////////////////////////////////////////////////////////////////// |
| 820 | 820 |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); | 983 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); |
| 984 } | 984 } |
| 985 | 985 |
| 986 DashingLineEffect::DashingLineEffect(GrColor color, | 986 DashingLineEffect::DashingLineEffect(GrColor color, |
| 987 GrPrimitiveEdgeType edgeType, | 987 GrPrimitiveEdgeType edgeType, |
| 988 const DashInfo& info, | 988 const DashInfo& info, |
| 989 SkScalar strokeWidth, | 989 SkScalar strokeWidth, |
| 990 const SkMatrix& localMatrix) | 990 const SkMatrix& localMatrix) |
| 991 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { | 991 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { |
| 992 this->initClassID<DashingLineEffect>(); | 992 this->initClassID<DashingLineEffect>(); |
| 993 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert
exAttribType)); | 993 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 994 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr
ibType)); | 994 fInCoord = &this->addVertexAttrib(Attribute("inCoord", kVec2f_GrVertexAttrib
Type)); |
| 995 SkScalar onLen = info.fIntervals[0]; | 995 SkScalar onLen = info.fIntervals[0]; |
| 996 SkScalar offLen = info.fIntervals[1]; | 996 SkScalar offLen = info.fIntervals[1]; |
| 997 SkScalar halfOffLen = SkScalarHalf(offLen); | 997 SkScalar halfOffLen = SkScalarHalf(offLen); |
| 998 SkScalar halfStroke = SkScalarHalf(strokeWidth); | 998 SkScalar halfStroke = SkScalarHalf(strokeWidth); |
| 999 fIntervalLength = onLen + offLen; | 999 fIntervalLength = onLen + offLen; |
| 1000 fRect.set(halfOffLen, -halfStroke, halfOffLen + onLen, halfStroke); | 1000 fRect.set(halfOffLen, -halfStroke, halfOffLen + onLen, halfStroke); |
| 1001 } | 1001 } |
| 1002 | 1002 |
| 1003 bool DashingLineEffect::onIsEqual(const GrGeometryProcessor& other) const { | 1003 bool DashingLineEffect::onIsEqual(const GrGeometryProcessor& other) const { |
| 1004 const DashingLineEffect& de = other.cast<DashingLineEffect>(); | 1004 const DashingLineEffect& de = other.cast<DashingLineEffect>(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 return DashingCircleEffect::Create(color, edgeType, info, | 1059 return DashingCircleEffect::Create(color, edgeType, info, |
| 1060 SkScalarHalf(strokeWidth), | 1060 SkScalarHalf(strokeWidth), |
| 1061 localMatrix); | 1061 localMatrix); |
| 1062 case GrDashingEffect::kNonRound_DashCap: | 1062 case GrDashingEffect::kNonRound_DashCap: |
| 1063 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); | 1063 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); |
| 1064 default: | 1064 default: |
| 1065 SkFAIL("Unexpected dashed cap."); | 1065 SkFAIL("Unexpected dashed cap."); |
| 1066 } | 1066 } |
| 1067 return NULL; | 1067 return NULL; |
| 1068 } | 1068 } |
| OLD | NEW |