| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 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 "SkTwoPointConicalGradient_gpu.h" | 9 #include "SkTwoPointConicalGradient_gpu.h" |
| 10 | 10 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 rot.setSinCos(-SkScalarMul(invDiffLen, diff.fY), | 51 rot.setSinCos(-SkScalarMul(invDiffLen, diff.fY), |
| 52 SkScalarMul(invDiffLen, diff.fX)); | 52 SkScalarMul(invDiffLen, diff.fX)); |
| 53 invLMatrix->postConcat(rot); | 53 invLMatrix->postConcat(rot); |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 | 56 |
| 57 class Edge2PtConicalEffect : public GrGradientEffect { | 57 class Edge2PtConicalEffect : public GrGradientEffect { |
| 58 public: | 58 public: |
| 59 | 59 |
| 60 static GrFragmentProcessor* Create(GrContext* ctx, | 60 static GrFragmentProcessor* Create(GrContext* ctx, |
| 61 GrShaderDataManager* shaderDataManager, |
| 61 const SkTwoPointConicalGradient& shader, | 62 const SkTwoPointConicalGradient& shader, |
| 62 const SkMatrix& matrix, | 63 const SkMatrix& matrix, |
| 63 SkShader::TileMode tm) { | 64 SkShader::TileMode tm) { |
| 64 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, shader, matrix, tm)); | 65 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, shaderDataManager, shader,
matrix, tm)); |
| 65 } | 66 } |
| 66 | 67 |
| 67 virtual ~Edge2PtConicalEffect() {} | 68 virtual ~Edge2PtConicalEffect() {} |
| 68 | 69 |
| 69 const char* name() const override { | 70 const char* name() const override { |
| 70 return "Two-Point Conical Gradient Edge Touching"; | 71 return "Two-Point Conical Gradient Edge Touching"; |
| 71 } | 72 } |
| 72 | 73 |
| 73 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 74 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
| 74 | 75 |
| 75 GrGLFragmentProcessor* createGLInstance() const override; | 76 GrGLFragmentProcessor* createGLInstance() const override; |
| 76 | 77 |
| 77 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. | 78 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. |
| 78 SkScalar center() const { return fCenterX1; } | 79 SkScalar center() const { return fCenterX1; } |
| 79 SkScalar diffRadius() const { return fDiffRadius; } | 80 SkScalar diffRadius() const { return fDiffRadius; } |
| 80 SkScalar radius() const { return fRadius0; } | 81 SkScalar radius() const { return fRadius0; } |
| 81 | 82 |
| 82 private: | 83 private: |
| 83 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 84 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
| 84 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); | 85 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); |
| 85 return (INHERITED::onIsEqual(sBase) && | 86 return (INHERITED::onIsEqual(sBase) && |
| 86 this->fCenterX1 == s.fCenterX1 && | 87 this->fCenterX1 == s.fCenterX1 && |
| 87 this->fRadius0 == s.fRadius0 && | 88 this->fRadius0 == s.fRadius0 && |
| 88 this->fDiffRadius == s.fDiffRadius); | 89 this->fDiffRadius == s.fDiffRadius); |
| 89 } | 90 } |
| 90 | 91 |
| 91 Edge2PtConicalEffect(GrContext* ctx, | 92 Edge2PtConicalEffect(GrContext* ctx, |
| 93 GrShaderDataManager* shaderDataManager, |
| 92 const SkTwoPointConicalGradient& shader, | 94 const SkTwoPointConicalGradient& shader, |
| 93 const SkMatrix& matrix, | 95 const SkMatrix& matrix, |
| 94 SkShader::TileMode tm) | 96 SkShader::TileMode tm) |
| 95 : INHERITED(ctx, shader, matrix, tm), | 97 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), |
| 96 fCenterX1(shader.getCenterX1()), | 98 fCenterX1(shader.getCenterX1()), |
| 97 fRadius0(shader.getStartRadius()), | 99 fRadius0(shader.getStartRadius()), |
| 98 fDiffRadius(shader.getDiffRadius()){ | 100 fDiffRadius(shader.getDiffRadius()){ |
| 99 this->initClassID<Edge2PtConicalEffect>(); | 101 this->initClassID<Edge2PtConicalEffect>(); |
| 100 // We should only be calling this shader if we are degenerate case with
touching circles | 102 // We should only be calling this shader if we are degenerate case with
touching circles |
| 101 // When deciding if we are in edge case, we scaled by the end radius for
cases when the | 103 // When deciding if we are in edge case, we scaled by the end radius for
cases when the |
| 102 // start radius was close to zero, otherwise we scaled by the start radi
us. In addition | 104 // start radius was close to zero, otherwise we scaled by the start radi
us. In addition |
| 103 // Our test for the edge case in set_matrix_circle_conical has a higher
tolerance so we | 105 // Our test for the edge case in set_matrix_circle_conical has a higher
tolerance so we |
| 104 // need the sqrt value below | 106 // need the sqrt value below |
| 105 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) < | 107 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) < |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 | 374 |
| 373 return conicalType; | 375 return conicalType; |
| 374 } | 376 } |
| 375 | 377 |
| 376 ////////////////////////////////////////////////////////////////////////////// | 378 ////////////////////////////////////////////////////////////////////////////// |
| 377 | 379 |
| 378 class FocalOutside2PtConicalEffect : public GrGradientEffect { | 380 class FocalOutside2PtConicalEffect : public GrGradientEffect { |
| 379 public: | 381 public: |
| 380 | 382 |
| 381 static GrFragmentProcessor* Create(GrContext* ctx, | 383 static GrFragmentProcessor* Create(GrContext* ctx, |
| 384 GrShaderDataManager* shaderDataManager, |
| 382 const SkTwoPointConicalGradient& shader, | 385 const SkTwoPointConicalGradient& shader, |
| 383 const SkMatrix& matrix, | 386 const SkMatrix& matrix, |
| 384 SkShader::TileMode tm, | 387 SkShader::TileMode tm, |
| 385 SkScalar focalX) { | 388 SkScalar focalX) { |
| 386 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm
, focalX)); | 389 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, |
| 390 focalX)); |
| 387 } | 391 } |
| 388 | 392 |
| 389 virtual ~FocalOutside2PtConicalEffect() { } | 393 virtual ~FocalOutside2PtConicalEffect() { } |
| 390 | 394 |
| 391 const char* name() const override { | 395 const char* name() const override { |
| 392 return "Two-Point Conical Gradient Focal Outside"; | 396 return "Two-Point Conical Gradient Focal Outside"; |
| 393 } | 397 } |
| 394 | 398 |
| 395 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 399 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
| 396 | 400 |
| 397 GrGLFragmentProcessor* createGLInstance() const override; | 401 GrGLFragmentProcessor* createGLInstance() const override; |
| 398 | 402 |
| 399 bool isFlipped() const { return fIsFlipped; } | 403 bool isFlipped() const { return fIsFlipped; } |
| 400 SkScalar focal() const { return fFocalX; } | 404 SkScalar focal() const { return fFocalX; } |
| 401 | 405 |
| 402 private: | 406 private: |
| 403 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 407 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
| 404 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica
lEffect>(); | 408 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica
lEffect>(); |
| 405 return (INHERITED::onIsEqual(sBase) && | 409 return (INHERITED::onIsEqual(sBase) && |
| 406 this->fFocalX == s.fFocalX && | 410 this->fFocalX == s.fFocalX && |
| 407 this->fIsFlipped == s.fIsFlipped); | 411 this->fIsFlipped == s.fIsFlipped); |
| 408 } | 412 } |
| 409 | 413 |
| 410 FocalOutside2PtConicalEffect(GrContext* ctx, | 414 FocalOutside2PtConicalEffect(GrContext* ctx, |
| 415 GrShaderDataManager* shaderDataManager, |
| 411 const SkTwoPointConicalGradient& shader, | 416 const SkTwoPointConicalGradient& shader, |
| 412 const SkMatrix& matrix, | 417 const SkMatrix& matrix, |
| 413 SkShader::TileMode tm, | 418 SkShader::TileMode tm, |
| 414 SkScalar focalX) | 419 SkScalar focalX) |
| 415 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX), fIsFlipped(shader.isF
lippedGrad()) { | 420 : INHERITED(ctx, shaderDataManager, shader, matrix, tm) |
| 421 , fFocalX(focalX) |
| 422 , fIsFlipped(shader.isFlippedGrad()) { |
| 416 this->initClassID<FocalOutside2PtConicalEffect>(); | 423 this->initClassID<FocalOutside2PtConicalEffect>(); |
| 417 } | 424 } |
| 418 | 425 |
| 419 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 426 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 420 | 427 |
| 421 SkScalar fFocalX; | 428 SkScalar fFocalX; |
| 422 bool fIsFlipped; | 429 bool fIsFlipped; |
| 423 | 430 |
| 424 typedef GrGradientEffect INHERITED; | 431 typedef GrGradientEffect INHERITED; |
| 425 }; | 432 }; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 } | 601 } |
| 595 | 602 |
| 596 ////////////////////////////////////////////////////////////////////////////// | 603 ////////////////////////////////////////////////////////////////////////////// |
| 597 | 604 |
| 598 class GLFocalInside2PtConicalEffect; | 605 class GLFocalInside2PtConicalEffect; |
| 599 | 606 |
| 600 class FocalInside2PtConicalEffect : public GrGradientEffect { | 607 class FocalInside2PtConicalEffect : public GrGradientEffect { |
| 601 public: | 608 public: |
| 602 | 609 |
| 603 static GrFragmentProcessor* Create(GrContext* ctx, | 610 static GrFragmentProcessor* Create(GrContext* ctx, |
| 611 GrShaderDataManager* shaderDataManager, |
| 604 const SkTwoPointConicalGradient& shader, | 612 const SkTwoPointConicalGradient& shader, |
| 605 const SkMatrix& matrix, | 613 const SkMatrix& matrix, |
| 606 SkShader::TileMode tm, | 614 SkShader::TileMode tm, |
| 607 SkScalar focalX) { | 615 SkScalar focalX) { |
| 608 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm,
focalX)); | 616 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, |
| 617 focalX)); |
| 609 } | 618 } |
| 610 | 619 |
| 611 virtual ~FocalInside2PtConicalEffect() {} | 620 virtual ~FocalInside2PtConicalEffect() {} |
| 612 | 621 |
| 613 const char* name() const override { | 622 const char* name() const override { |
| 614 return "Two-Point Conical Gradient Focal Inside"; | 623 return "Two-Point Conical Gradient Focal Inside"; |
| 615 } | 624 } |
| 616 | 625 |
| 617 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 626 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
| 618 | 627 |
| 619 GrGLFragmentProcessor* createGLInstance() const override; | 628 GrGLFragmentProcessor* createGLInstance() const override; |
| 620 | 629 |
| 621 SkScalar focal() const { return fFocalX; } | 630 SkScalar focal() const { return fFocalX; } |
| 622 | 631 |
| 623 typedef GLFocalInside2PtConicalEffect GLProcessor; | 632 typedef GLFocalInside2PtConicalEffect GLProcessor; |
| 624 | 633 |
| 625 private: | 634 private: |
| 626 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 635 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
| 627 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE
ffect>(); | 636 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE
ffect>(); |
| 628 return (INHERITED::onIsEqual(sBase) && | 637 return (INHERITED::onIsEqual(sBase) && |
| 629 this->fFocalX == s.fFocalX); | 638 this->fFocalX == s.fFocalX); |
| 630 } | 639 } |
| 631 | 640 |
| 632 FocalInside2PtConicalEffect(GrContext* ctx, | 641 FocalInside2PtConicalEffect(GrContext* ctx, |
| 642 GrShaderDataManager* shaderDataManager, |
| 633 const SkTwoPointConicalGradient& shader, | 643 const SkTwoPointConicalGradient& shader, |
| 634 const SkMatrix& matrix, | 644 const SkMatrix& matrix, |
| 635 SkShader::TileMode tm, | 645 SkShader::TileMode tm, |
| 636 SkScalar focalX) | 646 SkScalar focalX) |
| 637 : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) { | 647 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fFocalX(focalX)
{ |
| 638 this->initClassID<FocalInside2PtConicalEffect>(); | 648 this->initClassID<FocalInside2PtConicalEffect>(); |
| 639 } | 649 } |
| 640 | 650 |
| 641 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 651 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 642 | 652 |
| 643 SkScalar fFocalX; | 653 SkScalar fFocalX; |
| 644 | 654 |
| 645 typedef GrGradientEffect INHERITED; | 655 typedef GrGradientEffect INHERITED; |
| 646 }; | 656 }; |
| 647 | 657 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 if (A < 0.f) { | 851 if (A < 0.f) { |
| 842 return kInside_ConicalType; | 852 return kInside_ConicalType; |
| 843 } | 853 } |
| 844 return kOutside_ConicalType; | 854 return kOutside_ConicalType; |
| 845 } | 855 } |
| 846 | 856 |
| 847 class CircleInside2PtConicalEffect : public GrGradientEffect { | 857 class CircleInside2PtConicalEffect : public GrGradientEffect { |
| 848 public: | 858 public: |
| 849 | 859 |
| 850 static GrFragmentProcessor* Create(GrContext* ctx, | 860 static GrFragmentProcessor* Create(GrContext* ctx, |
| 861 GrShaderDataManager* shaderDataManager, |
| 851 const SkTwoPointConicalGradient& shader, | 862 const SkTwoPointConicalGradient& shader, |
| 852 const SkMatrix& matrix, | 863 const SkMatrix& matrix, |
| 853 SkShader::TileMode tm, | 864 SkShader::TileMode tm, |
| 854 const CircleConicalInfo& info) { | 865 const CircleConicalInfo& info) { |
| 855 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm
, info)); | 866 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, |
| 867 info)); |
| 856 } | 868 } |
| 857 | 869 |
| 858 virtual ~CircleInside2PtConicalEffect() {} | 870 virtual ~CircleInside2PtConicalEffect() {} |
| 859 | 871 |
| 860 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } | 872 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } |
| 861 | 873 |
| 862 virtual void getGLProcessorKey(const GrGLSLCaps& caps, | 874 virtual void getGLProcessorKey(const GrGLSLCaps& caps, |
| 863 GrProcessorKeyBuilder* b) const override; | 875 GrProcessorKeyBuilder* b) const override; |
| 864 | 876 |
| 865 GrGLFragmentProcessor* createGLInstance() const override; | 877 GrGLFragmentProcessor* createGLInstance() const override; |
| 866 | 878 |
| 867 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } | 879 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } |
| 868 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } | 880 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } |
| 869 SkScalar A() const { return fInfo.fA; } | 881 SkScalar A() const { return fInfo.fA; } |
| 870 SkScalar B() const { return fInfo.fB; } | 882 SkScalar B() const { return fInfo.fB; } |
| 871 SkScalar C() const { return fInfo.fC; } | 883 SkScalar C() const { return fInfo.fC; } |
| 872 | 884 |
| 873 private: | 885 private: |
| 874 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 886 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
| 875 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica
lEffect>(); | 887 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica
lEffect>(); |
| 876 return (INHERITED::onIsEqual(sBase) && | 888 return (INHERITED::onIsEqual(sBase) && |
| 877 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && | 889 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && |
| 878 this->fInfo.fA == s.fInfo.fA && | 890 this->fInfo.fA == s.fInfo.fA && |
| 879 this->fInfo.fB == s.fInfo.fB && | 891 this->fInfo.fB == s.fInfo.fB && |
| 880 this->fInfo.fC == s.fInfo.fC); | 892 this->fInfo.fC == s.fInfo.fC); |
| 881 } | 893 } |
| 882 | 894 |
| 883 CircleInside2PtConicalEffect(GrContext* ctx, | 895 CircleInside2PtConicalEffect(GrContext* ctx, |
| 896 GrShaderDataManager* shaderDataManager, |
| 884 const SkTwoPointConicalGradient& shader, | 897 const SkTwoPointConicalGradient& shader, |
| 885 const SkMatrix& matrix, | 898 const SkMatrix& matrix, |
| 886 SkShader::TileMode tm, | 899 SkShader::TileMode tm, |
| 887 const CircleConicalInfo& info) | 900 const CircleConicalInfo& info) |
| 888 : INHERITED(ctx, shader, matrix, tm), fInfo(info) { | 901 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fInfo(info) { |
| 889 this->initClassID<CircleInside2PtConicalEffect>(); | 902 this->initClassID<CircleInside2PtConicalEffect>(); |
| 890 } | 903 } |
| 891 | 904 |
| 892 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 905 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 893 | 906 |
| 894 const CircleConicalInfo fInfo; | 907 const CircleConicalInfo fInfo; |
| 895 | 908 |
| 896 typedef GrGradientEffect INHERITED; | 909 typedef GrGradientEffect INHERITED; |
| 897 }; | 910 }; |
| 898 | 911 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1065 const GrGLSLCaps&, GrProcessorKeyBui
lder* b) { | 1078 const GrGLSLCaps&, GrProcessorKeyBui
lder* b) { |
| 1066 b->add32(GenBaseGradientKey(processor)); | 1079 b->add32(GenBaseGradientKey(processor)); |
| 1067 } | 1080 } |
| 1068 | 1081 |
| 1069 ////////////////////////////////////////////////////////////////////////////// | 1082 ////////////////////////////////////////////////////////////////////////////// |
| 1070 | 1083 |
| 1071 class CircleOutside2PtConicalEffect : public GrGradientEffect { | 1084 class CircleOutside2PtConicalEffect : public GrGradientEffect { |
| 1072 public: | 1085 public: |
| 1073 | 1086 |
| 1074 static GrFragmentProcessor* Create(GrContext* ctx, | 1087 static GrFragmentProcessor* Create(GrContext* ctx, |
| 1088 GrShaderDataManager* shaderDataManager, |
| 1075 const SkTwoPointConicalGradient& shader, | 1089 const SkTwoPointConicalGradient& shader, |
| 1076 const SkMatrix& matrix, | 1090 const SkMatrix& matrix, |
| 1077 SkShader::TileMode tm, | 1091 SkShader::TileMode tm, |
| 1078 const CircleConicalInfo& info) { | 1092 const CircleConicalInfo& info) { |
| 1079 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t
m, info)); | 1093 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shaderDataManager
, shader, matrix, |
| 1094 tm, info)); |
| 1080 } | 1095 } |
| 1081 | 1096 |
| 1082 virtual ~CircleOutside2PtConicalEffect() {} | 1097 virtual ~CircleOutside2PtConicalEffect() {} |
| 1083 | 1098 |
| 1084 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } | 1099 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } |
| 1085 | 1100 |
| 1086 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 1101 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
| 1087 | 1102 |
| 1088 GrGLFragmentProcessor* createGLInstance() const override; | 1103 GrGLFragmentProcessor* createGLInstance() const override; |
| 1089 | 1104 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1101 return (INHERITED::onIsEqual(sBase) && | 1116 return (INHERITED::onIsEqual(sBase) && |
| 1102 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && | 1117 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && |
| 1103 this->fInfo.fA == s.fInfo.fA && | 1118 this->fInfo.fA == s.fInfo.fA && |
| 1104 this->fInfo.fB == s.fInfo.fB && | 1119 this->fInfo.fB == s.fInfo.fB && |
| 1105 this->fInfo.fC == s.fInfo.fC && | 1120 this->fInfo.fC == s.fInfo.fC && |
| 1106 this->fTLimit == s.fTLimit && | 1121 this->fTLimit == s.fTLimit && |
| 1107 this->fIsFlipped == s.fIsFlipped); | 1122 this->fIsFlipped == s.fIsFlipped); |
| 1108 } | 1123 } |
| 1109 | 1124 |
| 1110 CircleOutside2PtConicalEffect(GrContext* ctx, | 1125 CircleOutside2PtConicalEffect(GrContext* ctx, |
| 1126 GrShaderDataManager* shaderDataManager, |
| 1111 const SkTwoPointConicalGradient& shader, | 1127 const SkTwoPointConicalGradient& shader, |
| 1112 const SkMatrix& matrix, | 1128 const SkMatrix& matrix, |
| 1113 SkShader::TileMode tm, | 1129 SkShader::TileMode tm, |
| 1114 const CircleConicalInfo& info) | 1130 const CircleConicalInfo& info) |
| 1115 : INHERITED(ctx, shader, matrix, tm), fInfo(info) { | 1131 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fInfo(info) { |
| 1116 this->initClassID<CircleOutside2PtConicalEffect>(); | 1132 this->initClassID<CircleOutside2PtConicalEffect>(); |
| 1117 if (shader.getStartRadius() != shader.getEndRadius()) { | 1133 if (shader.getStartRadius() != shader.getEndRadius()) { |
| 1118 fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shade
r.getEndRadius()); | 1134 fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shade
r.getEndRadius()); |
| 1119 } else { | 1135 } else { |
| 1120 fTLimit = SK_ScalarMin; | 1136 fTLimit = SK_ScalarMin; |
| 1121 } | 1137 } |
| 1122 | 1138 |
| 1123 fIsFlipped = shader.isFlippedGrad(); | 1139 fIsFlipped = shader.isFlippedGrad(); |
| 1124 } | 1140 } |
| 1125 | 1141 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1329 void GLCircleOutside2PtConicalEffect::GenKey(const GrProcessor& processor, | 1345 void GLCircleOutside2PtConicalEffect::GenKey(const GrProcessor& processor, |
| 1330 const GrGLSLCaps&, GrProcessorKeyBu
ilder* b) { | 1346 const GrGLSLCaps&, GrProcessorKeyBu
ilder* b) { |
| 1331 uint32_t* key = b->add32n(2); | 1347 uint32_t* key = b->add32n(2); |
| 1332 key[0] = GenBaseGradientKey(processor); | 1348 key[0] = GenBaseGradientKey(processor); |
| 1333 key[1] = processor.cast<CircleOutside2PtConicalEffect>().isFlipped(); | 1349 key[1] = processor.cast<CircleOutside2PtConicalEffect>().isFlipped(); |
| 1334 } | 1350 } |
| 1335 | 1351 |
| 1336 ////////////////////////////////////////////////////////////////////////////// | 1352 ////////////////////////////////////////////////////////////////////////////// |
| 1337 | 1353 |
| 1338 GrFragmentProcessor* Gr2PtConicalGradientEffect::Create(GrContext* ctx, | 1354 GrFragmentProcessor* Gr2PtConicalGradientEffect::Create(GrContext* ctx, |
| 1355 GrShaderDataManager* sha
derDataManager, |
| 1339 const SkTwoPointConicalG
radient& shader, | 1356 const SkTwoPointConicalG
radient& shader, |
| 1340 SkShader::TileMode tm, | 1357 SkShader::TileMode tm, |
| 1341 const SkMatrix* localMat
rix) { | 1358 const SkMatrix* localMat
rix) { |
| 1342 SkMatrix matrix; | 1359 SkMatrix matrix; |
| 1343 if (!shader.getLocalMatrix().invert(&matrix)) { | 1360 if (!shader.getLocalMatrix().invert(&matrix)) { |
| 1344 return NULL; | 1361 return NULL; |
| 1345 } | 1362 } |
| 1346 if (localMatrix) { | 1363 if (localMatrix) { |
| 1347 SkMatrix inv; | 1364 SkMatrix inv; |
| 1348 if (!localMatrix->invert(&inv)) { | 1365 if (!localMatrix->invert(&inv)) { |
| 1349 return NULL; | 1366 return NULL; |
| 1350 } | 1367 } |
| 1351 matrix.postConcat(inv); | 1368 matrix.postConcat(inv); |
| 1352 } | 1369 } |
| 1353 | 1370 |
| 1354 if (shader.getStartRadius() < kErrorTol) { | 1371 if (shader.getStartRadius() < kErrorTol) { |
| 1355 SkScalar focalX; | 1372 SkScalar focalX; |
| 1356 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); | 1373 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); |
| 1357 if (type == kInside_ConicalType) { | 1374 if (type == kInside_ConicalType) { |
| 1358 return FocalInside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); | 1375 return FocalInside2PtConicalEffect::Create(ctx, shaderDataManager, s
hader, matrix, tm, |
| 1376 focalX); |
| 1359 } else if(type == kEdge_ConicalType) { | 1377 } else if(type == kEdge_ConicalType) { |
| 1360 set_matrix_edge_conical(shader, &matrix); | 1378 set_matrix_edge_conical(shader, &matrix); |
| 1361 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1379 return Edge2PtConicalEffect::Create(ctx, shaderDataManager, shader,
matrix, tm); |
| 1362 } else { | 1380 } else { |
| 1363 return FocalOutside2PtConicalEffect::Create(ctx, shader, matrix, tm,
focalX); | 1381 return FocalOutside2PtConicalEffect::Create(ctx, shaderDataManager,
shader, matrix, tm, |
| 1382 focalX); |
| 1364 } | 1383 } |
| 1365 } | 1384 } |
| 1366 | 1385 |
| 1367 CircleConicalInfo info; | 1386 CircleConicalInfo info; |
| 1368 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); | 1387 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); |
| 1369 | 1388 |
| 1370 if (type == kInside_ConicalType) { | 1389 if (type == kInside_ConicalType) { |
| 1371 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf
o); | 1390 return CircleInside2PtConicalEffect::Create(ctx, shaderDataManager, sha
der, matrix, tm, |
| 1391 info); |
| 1372 } else if (type == kEdge_ConicalType) { | 1392 } else if (type == kEdge_ConicalType) { |
| 1373 set_matrix_edge_conical(shader, &matrix); | 1393 set_matrix_edge_conical(shader, &matrix); |
| 1374 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); | 1394 return Edge2PtConicalEffect::Create(ctx, shaderDataManager, shader, matr
ix, tm); |
| 1375 } else { | 1395 } else { |
| 1376 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in
fo); | 1396 return CircleOutside2PtConicalEffect::Create(ctx, shaderDataManager, sha
der, matrix, tm, |
| 1397 info); |
| 1377 } | 1398 } |
| 1378 } | 1399 } |
| 1379 | 1400 |
| 1380 #endif | 1401 #endif |
| OLD | NEW |