| 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 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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&, |
| 496 const GrGLCaps&, | 496 const GrGLCaps&, |
| 497 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 497 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
| 498 | 498 |
| 499 GrGLGeometryProcessor* createGLInstance(const GrBatchTracker&) const SK_OVER
RIDE; | 499 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker&, |
| 500 const GrGLCaps&) const SK_O
VERRIDE; |
| 500 | 501 |
| 501 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 502 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
| 502 | 503 |
| 503 bool onCanMakeEqual(const GrBatchTracker&, | 504 bool onCanMakeEqual(const GrBatchTracker&, |
| 504 const GrGeometryProcessor&, | 505 const GrGeometryProcessor&, |
| 505 const GrBatchTracker&) const SK_OVERRIDE; | 506 const GrBatchTracker&) const SK_OVERRIDE; |
| 506 | 507 |
| 507 private: | 508 private: |
| 508 DashingCircleEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& i
nfo, | 509 DashingCircleEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& i
nfo, |
| 509 SkScalar radius, const SkMatrix& localMatrix); | 510 SkScalar radius, const SkMatrix& localMatrix); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 523 | 524 |
| 524 typedef GrGeometryProcessor INHERITED; | 525 typedef GrGeometryProcessor INHERITED; |
| 525 }; | 526 }; |
| 526 | 527 |
| 527 ////////////////////////////////////////////////////////////////////////////// | 528 ////////////////////////////////////////////////////////////////////////////// |
| 528 | 529 |
| 529 class GLDashingCircleEffect : public GrGLGeometryProcessor { | 530 class GLDashingCircleEffect : public GrGLGeometryProcessor { |
| 530 public: | 531 public: |
| 531 GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&); | 532 GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&); |
| 532 | 533 |
| 533 void emitCode(const EmitArgs&) SK_OVERRIDE; | 534 void onEmitCode(EmitArgs&) SK_OVERRIDE; |
| 534 | 535 |
| 535 static inline void GenKey(const GrGeometryProcessor&, | 536 static inline void GenKey(const GrGeometryProcessor&, |
| 536 const GrBatchTracker&, | 537 const GrBatchTracker&, |
| 537 const GrGLCaps&, | 538 const GrGLCaps&, |
| 538 GrProcessorKeyBuilder*); | 539 GrProcessorKeyBuilder*); |
| 539 | 540 |
| 540 virtual void setData(const GrGLProgramDataManager&, | 541 virtual void setData(const GrGLProgramDataManager&, |
| 541 const GrPrimitiveProcessor&, | 542 const GrPrimitiveProcessor&, |
| 542 const GrBatchTracker&) SK_OVERRIDE; | 543 const GrBatchTracker&) SK_OVERRIDE; |
| 543 | 544 |
| 544 private: | 545 private: |
| 545 UniformHandle fParamUniform; | 546 UniformHandle fParamUniform; |
| 546 UniformHandle fColorUniform; | 547 UniformHandle fColorUniform; |
| 547 GrColor fColor; | 548 GrColor fColor; |
| 548 SkScalar fPrevRadius; | 549 SkScalar fPrevRadius; |
| 549 SkScalar fPrevCenterX; | 550 SkScalar fPrevCenterX; |
| 550 SkScalar fPrevIntervalLength; | 551 SkScalar fPrevIntervalLength; |
| 551 typedef GrGLGeometryProcessor INHERITED; | 552 typedef GrGLGeometryProcessor INHERITED; |
| 552 }; | 553 }; |
| 553 | 554 |
| 554 GLDashingCircleEffect::GLDashingCircleEffect(const GrGeometryProcessor&, | 555 GLDashingCircleEffect::GLDashingCircleEffect(const GrGeometryProcessor&, |
| 555 const GrBatchTracker&) { | 556 const GrBatchTracker&) { |
| 556 fColor = GrColor_ILLEGAL; | 557 fColor = GrColor_ILLEGAL; |
| 557 fPrevRadius = SK_ScalarMin; | 558 fPrevRadius = SK_ScalarMin; |
| 558 fPrevCenterX = SK_ScalarMin; | 559 fPrevCenterX = SK_ScalarMin; |
| 559 fPrevIntervalLength = SK_ScalarMax; | 560 fPrevIntervalLength = SK_ScalarMax; |
| 560 } | 561 } |
| 561 | 562 |
| 562 void GLDashingCircleEffect::emitCode(const EmitArgs& args) { | 563 void GLDashingCircleEffect::onEmitCode(EmitArgs& args) { |
| 563 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>(); | 564 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>(); |
| 564 const DashingCircleBatchTracker local = args.fBT.cast<DashingCircleBatchTrac
ker>(); | 565 const DashingCircleBatchTracker local = args.fBT.cast<DashingCircleBatchTrac
ker>(); |
| 565 GrGLGPBuilder* pb = args.fPB; | 566 GrGLGPBuilder* pb = args.fPB; |
| 566 const char *paramName; | 567 const char *paramName; |
| 567 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co
ord, and | 568 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co
ord, and |
| 568 // the total interval length of the dash. | 569 // the total interval length of the dash. |
| 569 fParamUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, | 570 fParamUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibilit
y, |
| 570 kVec3f_GrSLType, kDefault_GrSLPrecision
, | 571 kVec3f_GrSLType, kDefault_GrSLPrecision
, |
| 571 "params", ¶mName); | 572 "params", ¶mName); |
| 572 | 573 |
| 573 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 574 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
| 574 | 575 |
| 576 // emit attributes |
| 577 vsBuilder->emitAttributes(dce); |
| 578 |
| 575 GrGLVertToFrag v(kVec2f_GrSLType); | 579 GrGLVertToFrag v(kVec2f_GrSLType); |
| 576 args.fPB->addVarying("Coord", &v); | 580 args.fPB->addVarying("Coord", &v); |
| 577 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dce.inCoord()->fName); | 581 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dce.inCoord()->fName); |
| 578 | 582 |
| 579 // Setup pass through color | 583 // Setup pass through color |
| 580 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NU
LL, &fColorUniform); | 584 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NU
LL, &fColorUniform); |
| 581 | 585 |
| 582 // setup coord outputs | |
| 583 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), dce.inPositi
on()->fName); | |
| 584 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), dce.inPosition(
)->fName); | |
| 585 | |
| 586 // setup uniform viewMatrix | 586 // setup uniform viewMatrix |
| 587 this->addUniformViewMatrix(pb); | 587 this->addUniformViewMatrix(pb); |
| 588 | 588 |
| 589 // setup position varying | 589 // Setup position |
| 590 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), th
is->uViewM(), | 590 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uV
iewM(), |
| 591 dce.inPosition()->fName); | 591 dce.inPosition()->fName); |
| 592 | 592 |
| 593 // emit transforms |
| 594 this->emitTransforms(args.fPB, this->position(), dce.inPosition()->fName, d
ce.localMatrix(), |
| 595 args.fTransformsIn, args.fTransformsOut); |
| 596 |
| 593 // transforms all points so that we can compare them to our test circle | 597 // transforms all points so that we can compare them to our test circle |
| 594 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 598 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 595 fsBuilder->codeAppendf("\t\tfloat xShifted = %s.x - floor(%s.x / %s.z) * %s.
z;\n", | 599 fsBuilder->codeAppendf("\t\tfloat xShifted = %s.x - floor(%s.x / %s.z) * %s.
z;\n", |
| 596 v.fsIn(), v.fsIn(), paramName, paramName); | 600 v.fsIn(), v.fsIn(), paramName, paramName); |
| 597 fsBuilder->codeAppendf("\t\tvec2 fragPosShifted = vec2(xShifted, %s.y);\n",
v.fsIn()); | 601 fsBuilder->codeAppendf("\t\tvec2 fragPosShifted = vec2(xShifted, %s.y);\n",
v.fsIn()); |
| 598 fsBuilder->codeAppendf("\t\tvec2 center = vec2(%s.y, 0.0);\n", paramName); | 602 fsBuilder->codeAppendf("\t\tvec2 center = vec2(%s.y, 0.0);\n", paramName); |
| 599 fsBuilder->codeAppend("\t\tfloat dist = length(center - fragPosShifted);\n")
; | 603 fsBuilder->codeAppend("\t\tfloat dist = length(center - fragPosShifted);\n")
; |
| 600 if (GrProcessorEdgeTypeIsAA(dce.getEdgeType())) { | 604 if (GrProcessorEdgeTypeIsAA(dce.getEdgeType())) { |
| 601 fsBuilder->codeAppendf("\t\tfloat diff = dist - %s.x;\n", paramName); | 605 fsBuilder->codeAppendf("\t\tfloat diff = dist - %s.x;\n", paramName); |
| 602 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n"); | 606 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n"); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 void DashingCircleEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* ou
t) const { | 666 void DashingCircleEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* ou
t) const { |
| 663 out->setUnknownSingleComponent(); | 667 out->setUnknownSingleComponent(); |
| 664 } | 668 } |
| 665 | 669 |
| 666 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, | 670 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt, |
| 667 const GrGLCaps& caps, | 671 const GrGLCaps& caps, |
| 668 GrProcessorKeyBuilder* b) const { | 672 GrProcessorKeyBuilder* b) const { |
| 669 GLDashingCircleEffect::GenKey(*this, bt, caps, b); | 673 GLDashingCircleEffect::GenKey(*this, bt, caps, b); |
| 670 } | 674 } |
| 671 | 675 |
| 672 GrGLGeometryProcessor* DashingCircleEffect::createGLInstance(const GrBatchTracke
r& bt) const { | 676 GrGLPrimitiveProcessor* DashingCircleEffect::createGLInstance(const GrBatchTrack
er& bt, |
| 677 const GrGLCaps&) c
onst { |
| 673 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); | 678 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt)); |
| 674 } | 679 } |
| 675 | 680 |
| 676 DashingCircleEffect::DashingCircleEffect(GrColor color, | 681 DashingCircleEffect::DashingCircleEffect(GrColor color, |
| 677 GrPrimitiveEdgeType edgeType, | 682 GrPrimitiveEdgeType edgeType, |
| 678 const DashInfo& info, | 683 const DashInfo& info, |
| 679 SkScalar radius, | 684 SkScalar radius, |
| 680 const SkMatrix& localMatrix) | 685 const SkMatrix& localMatrix) |
| 681 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { | 686 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { |
| 682 this->initClassID<DashingCircleEffect>(); | 687 this->initClassID<DashingCircleEffect>(); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } | 781 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } |
| 777 | 782 |
| 778 const SkRect& getRect() const { return fRect; } | 783 const SkRect& getRect() const { return fRect; } |
| 779 | 784 |
| 780 SkScalar getIntervalLength() const { return fIntervalLength; } | 785 SkScalar getIntervalLength() const { return fIntervalLength; } |
| 781 | 786 |
| 782 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 787 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 783 const GrGLCaps& caps, | 788 const GrGLCaps& caps, |
| 784 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 789 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
| 785 | 790 |
| 786 GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_O
VERRIDE; | 791 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 792 const GrGLCaps&) const SK_O
VERRIDE; |
| 787 | 793 |
| 788 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; | 794 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE; |
| 789 | 795 |
| 790 bool onCanMakeEqual(const GrBatchTracker&, | 796 bool onCanMakeEqual(const GrBatchTracker&, |
| 791 const GrGeometryProcessor&, | 797 const GrGeometryProcessor&, |
| 792 const GrBatchTracker&) const SK_OVERRIDE; | 798 const GrBatchTracker&) const SK_OVERRIDE; |
| 793 | 799 |
| 794 private: | 800 private: |
| 795 DashingLineEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& inf
o, | 801 DashingLineEffect(GrColor, GrPrimitiveEdgeType edgeType, const DashInfo& inf
o, |
| 796 SkScalar strokeWidth, const SkMatrix& localMatrix); | 802 SkScalar strokeWidth, const SkMatrix& localMatrix); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 809 | 815 |
| 810 typedef GrGeometryProcessor INHERITED; | 816 typedef GrGeometryProcessor INHERITED; |
| 811 }; | 817 }; |
| 812 | 818 |
| 813 ////////////////////////////////////////////////////////////////////////////// | 819 ////////////////////////////////////////////////////////////////////////////// |
| 814 | 820 |
| 815 class GLDashingLineEffect : public GrGLGeometryProcessor { | 821 class GLDashingLineEffect : public GrGLGeometryProcessor { |
| 816 public: | 822 public: |
| 817 GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&); | 823 GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&); |
| 818 | 824 |
| 819 void emitCode(const EmitArgs&) SK_OVERRIDE; | 825 void onEmitCode(EmitArgs&) SK_OVERRIDE; |
| 820 | 826 |
| 821 static inline void GenKey(const GrGeometryProcessor&, | 827 static inline void GenKey(const GrGeometryProcessor&, |
| 822 const GrBatchTracker&, | 828 const GrBatchTracker&, |
| 823 const GrGLCaps&, | 829 const GrGLCaps&, |
| 824 GrProcessorKeyBuilder*); | 830 GrProcessorKeyBuilder*); |
| 825 | 831 |
| 826 virtual void setData(const GrGLProgramDataManager&, | 832 virtual void setData(const GrGLProgramDataManager&, |
| 827 const GrPrimitiveProcessor&, | 833 const GrPrimitiveProcessor&, |
| 828 const GrBatchTracker&) SK_OVERRIDE; | 834 const GrBatchTracker&) SK_OVERRIDE; |
| 829 | 835 |
| 830 private: | 836 private: |
| 831 GrColor fColor; | 837 GrColor fColor; |
| 832 UniformHandle fRectUniform; | 838 UniformHandle fRectUniform; |
| 833 UniformHandle fIntervalUniform; | 839 UniformHandle fIntervalUniform; |
| 834 UniformHandle fColorUniform; | 840 UniformHandle fColorUniform; |
| 835 SkRect fPrevRect; | 841 SkRect fPrevRect; |
| 836 SkScalar fPrevIntervalLength; | 842 SkScalar fPrevIntervalLength; |
| 837 typedef GrGLGeometryProcessor INHERITED; | 843 typedef GrGLGeometryProcessor INHERITED; |
| 838 }; | 844 }; |
| 839 | 845 |
| 840 GLDashingLineEffect::GLDashingLineEffect(const GrGeometryProcessor&, | 846 GLDashingLineEffect::GLDashingLineEffect(const GrGeometryProcessor&, |
| 841 const GrBatchTracker&) { | 847 const GrBatchTracker&) { |
| 842 fColor = GrColor_ILLEGAL; | 848 fColor = GrColor_ILLEGAL; |
| 843 fPrevRect.fLeft = SK_ScalarNaN; | 849 fPrevRect.fLeft = SK_ScalarNaN; |
| 844 fPrevIntervalLength = SK_ScalarMax; | 850 fPrevIntervalLength = SK_ScalarMax; |
| 845 } | 851 } |
| 846 | 852 |
| 847 void GLDashingLineEffect::emitCode(const EmitArgs& args) { | 853 void GLDashingLineEffect::onEmitCode(EmitArgs& args) { |
| 848 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>(); | 854 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>(); |
| 849 const DashingLineBatchTracker& local = args.fBT.cast<DashingLineBatchTracker
>(); | 855 const DashingLineBatchTracker& local = args.fBT.cast<DashingLineBatchTracker
>(); |
| 850 GrGLGPBuilder* pb = args.fPB; | 856 GrGLGPBuilder* pb = args.fPB; |
| 851 const char *rectName; | 857 const char *rectName; |
| 852 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot
tom - 0.5), | 858 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot
tom - 0.5), |
| 853 // respectively. | 859 // respectively. |
| 854 fRectUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility
, | 860 fRectUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility
, |
| 855 kVec4f_GrSLType, kDefault_GrSLPrecision, | 861 kVec4f_GrSLType, kDefault_GrSLPrecision, |
| 856 "rect", | 862 "rect", |
| 857 &rectName); | 863 &rectName); |
| 858 const char *intervalName; | 864 const char *intervalName; |
| 859 // The interval uniform's refers to the total length of the interval (on + o
ff) | 865 // The interval uniform's refers to the total length of the interval (on + o
ff) |
| 860 fIntervalUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, | 866 fIntervalUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
| 861 kFloat_GrSLType, kDefault_GrSLPrecis
ion, | 867 kFloat_GrSLType, kDefault_GrSLPrecis
ion, |
| 862 "interval", | 868 "interval", |
| 863 &intervalName); | 869 &intervalName); |
| 864 | 870 |
| 865 | 871 |
| 866 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 872 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
| 867 | 873 |
| 874 // emit attributes |
| 875 vsBuilder->emitAttributes(de); |
| 876 |
| 868 GrGLVertToFrag v(kVec2f_GrSLType); | 877 GrGLVertToFrag v(kVec2f_GrSLType); |
| 869 args.fPB->addVarying("Coord", &v); | 878 args.fPB->addVarying("Coord", &v); |
| 870 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), de.inCoord()->fName); | 879 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), de.inCoord()->fName); |
| 871 | 880 |
| 872 // Setup pass through color | 881 // Setup pass through color |
| 873 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NU
LL, &fColorUniform); | 882 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputColor, NU
LL, &fColorUniform); |
| 874 | 883 |
| 875 // setup coord outputs | |
| 876 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), de.inPositio
n()->fName); | |
| 877 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), de.inPosition()
->fName); | |
| 878 | |
| 879 // setup uniform viewMatrix | 884 // setup uniform viewMatrix |
| 880 this->addUniformViewMatrix(pb); | 885 this->addUniformViewMatrix(pb); |
| 881 | 886 |
| 882 // setup position varying | 887 // Setup position |
| 883 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), th
is->uViewM(), | 888 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uV
iewM(), |
| 884 de.inPosition()->fName); | 889 de.inPosition()->fName); |
| 885 | 890 |
| 891 // emit transforms |
| 892 this->emitTransforms(args.fPB, this->position(), de.inPosition()->fName, de
.localMatrix(), |
| 893 args.fTransformsIn, args.fTransformsOut); |
| 894 |
| 886 // transforms all points so that we can compare them to our test rect | 895 // transforms all points so that we can compare them to our test rect |
| 887 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 896 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
| 888 fsBuilder->codeAppendf("\t\tfloat xShifted = %s.x - floor(%s.x / %s) * %s;\n
", | 897 fsBuilder->codeAppendf("\t\tfloat xShifted = %s.x - floor(%s.x / %s) * %s;\n
", |
| 889 v.fsIn(), v.fsIn(), intervalName, intervalName); | 898 v.fsIn(), v.fsIn(), intervalName, intervalName); |
| 890 fsBuilder->codeAppendf("\t\tvec2 fragPosShifted = vec2(xShifted, %s.y);\n",
v.fsIn()); | 899 fsBuilder->codeAppendf("\t\tvec2 fragPosShifted = vec2(xShifted, %s.y);\n",
v.fsIn()); |
| 891 if (GrProcessorEdgeTypeIsAA(de.getEdgeType())) { | 900 if (GrProcessorEdgeTypeIsAA(de.getEdgeType())) { |
| 892 // The amount of coverage removed in x and y by the edges is computed as
a pair of negative | 901 // The amount of coverage removed in x and y by the edges is computed as
a pair of negative |
| 893 // numbers, xSub and ySub. | 902 // numbers, xSub and ySub. |
| 894 fsBuilder->codeAppend("\t\tfloat xSub, ySub;\n"); | 903 fsBuilder->codeAppend("\t\tfloat xSub, ySub;\n"); |
| 895 fsBuilder->codeAppendf("\t\txSub = min(fragPosShifted.x - %s.x, 0.0);\n"
, rectName); | 904 fsBuilder->codeAppendf("\t\txSub = min(fragPosShifted.x - %s.x, 0.0);\n"
, rectName); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 void DashingLineEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* out)
const { | 971 void DashingLineEffect::onGetInvariantOutputCoverage(GrInitInvariantOutput* out)
const { |
| 963 out->setUnknownSingleComponent(); | 972 out->setUnknownSingleComponent(); |
| 964 } | 973 } |
| 965 | 974 |
| 966 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, | 975 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt, |
| 967 const GrGLCaps& caps, | 976 const GrGLCaps& caps, |
| 968 GrProcessorKeyBuilder* b) const { | 977 GrProcessorKeyBuilder* b) const { |
| 969 GLDashingLineEffect::GenKey(*this, bt, caps, b); | 978 GLDashingLineEffect::GenKey(*this, bt, caps, b); |
| 970 } | 979 } |
| 971 | 980 |
| 972 GrGLGeometryProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker&
bt) const { | 981 GrGLPrimitiveProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker
& bt, |
| 982 const GrGLCaps&) con
st { |
| 973 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); | 983 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt)); |
| 974 } | 984 } |
| 975 | 985 |
| 976 DashingLineEffect::DashingLineEffect(GrColor color, | 986 DashingLineEffect::DashingLineEffect(GrColor color, |
| 977 GrPrimitiveEdgeType edgeType, | 987 GrPrimitiveEdgeType edgeType, |
| 978 const DashInfo& info, | 988 const DashInfo& info, |
| 979 SkScalar strokeWidth, | 989 SkScalar strokeWidth, |
| 980 const SkMatrix& localMatrix) | 990 const SkMatrix& localMatrix) |
| 981 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { | 991 : INHERITED(color, SkMatrix::I(), localMatrix), fEdgeType(edgeType) { |
| 982 this->initClassID<DashingLineEffect>(); | 992 this->initClassID<DashingLineEffect>(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 return DashingCircleEffect::Create(color, edgeType, info, | 1059 return DashingCircleEffect::Create(color, edgeType, info, |
| 1050 SkScalarHalf(strokeWidth), | 1060 SkScalarHalf(strokeWidth), |
| 1051 localMatrix); | 1061 localMatrix); |
| 1052 case GrDashingEffect::kNonRound_DashCap: | 1062 case GrDashingEffect::kNonRound_DashCap: |
| 1053 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); | 1063 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); |
| 1054 default: | 1064 default: |
| 1055 SkFAIL("Unexpected dashed cap."); | 1065 SkFAIL("Unexpected dashed cap."); |
| 1056 } | 1066 } |
| 1057 return NULL; | 1067 return NULL; |
| 1058 } | 1068 } |
| OLD | NEW |