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