| 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 GrProcessorDataManager* procDataManager, | 62 GrProcessorDataManager* procDataManager, |
| 63 const SkTwoPointConicalGradient& shader, | 63 const SkTwoPointConicalGradient& shader, |
| 64 const SkMatrix& matrix, | 64 const SkMatrix& matrix, |
| 65 SkShader::TileMode tm) { | 65 SkShader::TileMode tm) { |
| 66 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, procDataManager, shader, m
atrix, tm)); | 66 return new Edge2PtConicalEffect(ctx, procDataManager, shader, matrix, tm
); |
| 67 } | 67 } |
| 68 | 68 |
| 69 virtual ~Edge2PtConicalEffect() {} | 69 virtual ~Edge2PtConicalEffect() {} |
| 70 | 70 |
| 71 const char* name() const override { | 71 const char* name() const override { |
| 72 return "Two-Point Conical Gradient Edge Touching"; | 72 return "Two-Point Conical Gradient Edge Touching"; |
| 73 } | 73 } |
| 74 | 74 |
| 75 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. | 75 // The radial gradient parameters can collapse to a linear (instead of quadr
atic) equation. |
| 76 SkScalar center() const { return fCenterX1; } | 76 SkScalar center() const { return fCenterX1; } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 typedef GrGLGradientEffect INHERITED; | 168 typedef GrGLGradientEffect INHERITED; |
| 169 | 169 |
| 170 }; | 170 }; |
| 171 | 171 |
| 172 void Edge2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 172 void Edge2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 173 GrProcessorKeyBuilder* b) const { | 173 GrProcessorKeyBuilder* b) const { |
| 174 GLEdge2PtConicalEffect::GenKey(*this, caps, b); | 174 GLEdge2PtConicalEffect::GenKey(*this, caps, b); |
| 175 } | 175 } |
| 176 | 176 |
| 177 GrGLFragmentProcessor* Edge2PtConicalEffect::onCreateGLInstance() const { | 177 GrGLFragmentProcessor* Edge2PtConicalEffect::onCreateGLInstance() const { |
| 178 return SkNEW_ARGS(GLEdge2PtConicalEffect, (*this)); | 178 return new GLEdge2PtConicalEffect(*this); |
| 179 } | 179 } |
| 180 | 180 |
| 181 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); | 181 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect); |
| 182 | 182 |
| 183 /* | 183 /* |
| 184 * All Two point conical gradient test create functions may occasionally create
edge case shaders | 184 * All Two point conical gradient test create functions may occasionally create
edge case shaders |
| 185 */ | 185 */ |
| 186 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(GrProcessorTestData* d) { | 186 GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(GrProcessorTestData* d) { |
| 187 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 187 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| 188 SkScalar radius1 = d->fRandom->nextUScalar1(); | 188 SkScalar radius1 = d->fRandom->nextUScalar1(); |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 | 369 |
| 370 class FocalOutside2PtConicalEffect : public GrGradientEffect { | 370 class FocalOutside2PtConicalEffect : public GrGradientEffect { |
| 371 public: | 371 public: |
| 372 | 372 |
| 373 static GrFragmentProcessor* Create(GrContext* ctx, | 373 static GrFragmentProcessor* Create(GrContext* ctx, |
| 374 GrProcessorDataManager* procDataManager, | 374 GrProcessorDataManager* procDataManager, |
| 375 const SkTwoPointConicalGradient& shader, | 375 const SkTwoPointConicalGradient& shader, |
| 376 const SkMatrix& matrix, | 376 const SkMatrix& matrix, |
| 377 SkShader::TileMode tm, | 377 SkShader::TileMode tm, |
| 378 SkScalar focalX) { | 378 SkScalar focalX) { |
| 379 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, procDataManager, s
hader, matrix, tm, | 379 return new FocalOutside2PtConicalEffect(ctx, procDataManager, shader, ma
trix, tm, focalX); |
| 380 focalX)); | |
| 381 } | 380 } |
| 382 | 381 |
| 383 virtual ~FocalOutside2PtConicalEffect() { } | 382 virtual ~FocalOutside2PtConicalEffect() { } |
| 384 | 383 |
| 385 const char* name() const override { | 384 const char* name() const override { |
| 386 return "Two-Point Conical Gradient Focal Outside"; | 385 return "Two-Point Conical Gradient Focal Outside"; |
| 387 } | 386 } |
| 388 | 387 |
| 389 bool isFlipped() const { return fIsFlipped; } | 388 bool isFlipped() const { return fIsFlipped; } |
| 390 SkScalar focal() const { return fFocalX; } | 389 SkScalar focal() const { return fFocalX; } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 typedef GrGLGradientEffect INHERITED; | 450 typedef GrGLGradientEffect INHERITED; |
| 452 | 451 |
| 453 }; | 452 }; |
| 454 | 453 |
| 455 void FocalOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 454 void FocalOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 456 GrProcessorKeyBuilder* b) c
onst { | 455 GrProcessorKeyBuilder* b) c
onst { |
| 457 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b); | 456 GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b); |
| 458 } | 457 } |
| 459 | 458 |
| 460 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::onCreateGLInstance() const
{ | 459 GrGLFragmentProcessor* FocalOutside2PtConicalEffect::onCreateGLInstance() const
{ |
| 461 return SkNEW_ARGS(GLFocalOutside2PtConicalEffect, (*this)); | 460 return new GLFocalOutside2PtConicalEffect(*this); |
| 462 } | 461 } |
| 463 | 462 |
| 464 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); | 463 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect); |
| 465 | 464 |
| 466 /* | 465 /* |
| 467 * All Two point conical gradient test create functions may occasionally create
edge case shaders | 466 * All Two point conical gradient test create functions may occasionally create
edge case shaders |
| 468 */ | 467 */ |
| 469 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(GrProcessorTestDat
a* d) { | 468 GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(GrProcessorTestDat
a* d) { |
| 470 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 469 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| 471 SkScalar radius1 = 0.f; | 470 SkScalar radius1 = 0.f; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 | 585 |
| 587 class FocalInside2PtConicalEffect : public GrGradientEffect { | 586 class FocalInside2PtConicalEffect : public GrGradientEffect { |
| 588 public: | 587 public: |
| 589 | 588 |
| 590 static GrFragmentProcessor* Create(GrContext* ctx, | 589 static GrFragmentProcessor* Create(GrContext* ctx, |
| 591 GrProcessorDataManager* procDataManager, | 590 GrProcessorDataManager* procDataManager, |
| 592 const SkTwoPointConicalGradient& shader, | 591 const SkTwoPointConicalGradient& shader, |
| 593 const SkMatrix& matrix, | 592 const SkMatrix& matrix, |
| 594 SkShader::TileMode tm, | 593 SkShader::TileMode tm, |
| 595 SkScalar focalX) { | 594 SkScalar focalX) { |
| 596 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, procDataManager, sh
ader, matrix, tm, | 595 return new FocalInside2PtConicalEffect(ctx, procDataManager, shader, mat
rix, tm, focalX); |
| 597 focalX)); | |
| 598 } | 596 } |
| 599 | 597 |
| 600 virtual ~FocalInside2PtConicalEffect() {} | 598 virtual ~FocalInside2PtConicalEffect() {} |
| 601 | 599 |
| 602 const char* name() const override { | 600 const char* name() const override { |
| 603 return "Two-Point Conical Gradient Focal Inside"; | 601 return "Two-Point Conical Gradient Focal Inside"; |
| 604 } | 602 } |
| 605 | 603 |
| 606 SkScalar focal() const { return fFocalX; } | 604 SkScalar focal() const { return fFocalX; } |
| 607 | 605 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 typedef GrGLGradientEffect INHERITED; | 661 typedef GrGLGradientEffect INHERITED; |
| 664 | 662 |
| 665 }; | 663 }; |
| 666 | 664 |
| 667 void FocalInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 665 void FocalInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 668 GrProcessorKeyBuilder* b) const { | 666 GrProcessorKeyBuilder* b) const { |
| 669 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b); | 667 GLFocalInside2PtConicalEffect::GenKey(*this, caps, b); |
| 670 } | 668 } |
| 671 | 669 |
| 672 GrGLFragmentProcessor* FocalInside2PtConicalEffect::onCreateGLInstance() const { | 670 GrGLFragmentProcessor* FocalInside2PtConicalEffect::onCreateGLInstance() const { |
| 673 return SkNEW_ARGS(GLFocalInside2PtConicalEffect, (*this)); | 671 return new GLFocalInside2PtConicalEffect(*this); |
| 674 } | 672 } |
| 675 | 673 |
| 676 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); | 674 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect); |
| 677 | 675 |
| 678 /* | 676 /* |
| 679 * All Two point conical gradient test create functions may occasionally create
edge case shaders | 677 * All Two point conical gradient test create functions may occasionally create
edge case shaders |
| 680 */ | 678 */ |
| 681 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(GrProcessorTestData
* d) { | 679 GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(GrProcessorTestData
* d) { |
| 682 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 680 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| 683 SkScalar radius1 = 0.f; | 681 SkScalar radius1 = 0.f; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 825 | 823 |
| 826 class CircleInside2PtConicalEffect : public GrGradientEffect { | 824 class CircleInside2PtConicalEffect : public GrGradientEffect { |
| 827 public: | 825 public: |
| 828 | 826 |
| 829 static GrFragmentProcessor* Create(GrContext* ctx, | 827 static GrFragmentProcessor* Create(GrContext* ctx, |
| 830 GrProcessorDataManager* procDataManager, | 828 GrProcessorDataManager* procDataManager, |
| 831 const SkTwoPointConicalGradient& shader, | 829 const SkTwoPointConicalGradient& shader, |
| 832 const SkMatrix& matrix, | 830 const SkMatrix& matrix, |
| 833 SkShader::TileMode tm, | 831 SkShader::TileMode tm, |
| 834 const CircleConicalInfo& info) { | 832 const CircleConicalInfo& info) { |
| 835 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, procDataManager, s
hader, matrix, tm, | 833 return new CircleInside2PtConicalEffect(ctx, procDataManager, shader, ma
trix, tm, info); |
| 836 info)); | |
| 837 } | 834 } |
| 838 | 835 |
| 839 virtual ~CircleInside2PtConicalEffect() {} | 836 virtual ~CircleInside2PtConicalEffect() {} |
| 840 | 837 |
| 841 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } | 838 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } |
| 842 | 839 |
| 843 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } | 840 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } |
| 844 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } | 841 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } |
| 845 SkScalar A() const { return fInfo.fA; } | 842 SkScalar A() const { return fInfo.fA; } |
| 846 SkScalar B() const { return fInfo.fB; } | 843 SkScalar B() const { return fInfo.fB; } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 typedef GrGLGradientEffect INHERITED; | 908 typedef GrGLGradientEffect INHERITED; |
| 912 | 909 |
| 913 }; | 910 }; |
| 914 | 911 |
| 915 void CircleInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 912 void CircleInside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 916 GrProcessorKeyBuilder* b) c
onst { | 913 GrProcessorKeyBuilder* b) c
onst { |
| 917 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b); | 914 GLCircleInside2PtConicalEffect::GenKey(*this, caps, b); |
| 918 } | 915 } |
| 919 | 916 |
| 920 GrGLFragmentProcessor* CircleInside2PtConicalEffect::onCreateGLInstance() const
{ | 917 GrGLFragmentProcessor* CircleInside2PtConicalEffect::onCreateGLInstance() const
{ |
| 921 return SkNEW_ARGS(GLCircleInside2PtConicalEffect, (*this)); | 918 return new GLCircleInside2PtConicalEffect(*this); |
| 922 } | 919 } |
| 923 | 920 |
| 924 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); | 921 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect); |
| 925 | 922 |
| 926 /* | 923 /* |
| 927 * All Two point conical gradient test create functions may occasionally create
edge case shaders | 924 * All Two point conical gradient test create functions may occasionally create
edge case shaders |
| 928 */ | 925 */ |
| 929 GrFragmentProcessor* | 926 GrFragmentProcessor* |
| 930 CircleInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { | 927 CircleInside2PtConicalEffect::TestCreate(GrProcessorTestData* d) { |
| 931 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 928 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 | 1039 |
| 1043 class CircleOutside2PtConicalEffect : public GrGradientEffect { | 1040 class CircleOutside2PtConicalEffect : public GrGradientEffect { |
| 1044 public: | 1041 public: |
| 1045 | 1042 |
| 1046 static GrFragmentProcessor* Create(GrContext* ctx, | 1043 static GrFragmentProcessor* Create(GrContext* ctx, |
| 1047 GrProcessorDataManager* procDataManager, | 1044 GrProcessorDataManager* procDataManager, |
| 1048 const SkTwoPointConicalGradient& shader, | 1045 const SkTwoPointConicalGradient& shader, |
| 1049 const SkMatrix& matrix, | 1046 const SkMatrix& matrix, |
| 1050 SkShader::TileMode tm, | 1047 SkShader::TileMode tm, |
| 1051 const CircleConicalInfo& info) { | 1048 const CircleConicalInfo& info) { |
| 1052 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, procDataManager,
shader, matrix, | 1049 return new CircleOutside2PtConicalEffect(ctx, procDataManager, shader, m
atrix, tm, info); |
| 1053 tm, info)); | |
| 1054 } | 1050 } |
| 1055 | 1051 |
| 1056 virtual ~CircleOutside2PtConicalEffect() {} | 1052 virtual ~CircleOutside2PtConicalEffect() {} |
| 1057 | 1053 |
| 1058 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } | 1054 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } |
| 1059 | 1055 |
| 1060 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } | 1056 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } |
| 1061 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } | 1057 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } |
| 1062 SkScalar A() const { return fInfo.fA; } | 1058 SkScalar A() const { return fInfo.fA; } |
| 1063 SkScalar B() const { return fInfo.fB; } | 1059 SkScalar B() const { return fInfo.fB; } |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1143 typedef GrGLGradientEffect INHERITED; | 1139 typedef GrGLGradientEffect INHERITED; |
| 1144 | 1140 |
| 1145 }; | 1141 }; |
| 1146 | 1142 |
| 1147 void CircleOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 1143 void CircleOutside2PtConicalEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 1148 GrProcessorKeyBuilder* b)
const { | 1144 GrProcessorKeyBuilder* b)
const { |
| 1149 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b); | 1145 GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b); |
| 1150 } | 1146 } |
| 1151 | 1147 |
| 1152 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::onCreateGLInstance() const
{ | 1148 GrGLFragmentProcessor* CircleOutside2PtConicalEffect::onCreateGLInstance() const
{ |
| 1153 return SkNEW_ARGS(GLCircleOutside2PtConicalEffect, (*this)); | 1149 return new GLCircleOutside2PtConicalEffect(*this); |
| 1154 } | 1150 } |
| 1155 | 1151 |
| 1156 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); | 1152 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect); |
| 1157 | 1153 |
| 1158 /* | 1154 /* |
| 1159 * All Two point conical gradient test create functions may occasionally create
edge case shaders | 1155 * All Two point conical gradient test create functions may occasionally create
edge case shaders |
| 1160 */ | 1156 */ |
| 1161 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(GrProcessorTestDa
ta* d) { | 1157 GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(GrProcessorTestDa
ta* d) { |
| 1162 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; | 1158 SkPoint center1 = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; |
| 1163 SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius
1 != 0 | 1159 SkScalar radius1 = d->fRandom->nextUScalar1() + 0.0001f; // make sure radius
1 != 0 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1339 } else if (type == kEdge_ConicalType) { | 1335 } else if (type == kEdge_ConicalType) { |
| 1340 set_matrix_edge_conical(shader, &matrix); | 1336 set_matrix_edge_conical(shader, &matrix); |
| 1341 return Edge2PtConicalEffect::Create(ctx, procDataManager, shader, matrix
, tm); | 1337 return Edge2PtConicalEffect::Create(ctx, procDataManager, shader, matrix
, tm); |
| 1342 } else { | 1338 } else { |
| 1343 return CircleOutside2PtConicalEffect::Create(ctx, procDataManager, shade
r, matrix, tm, | 1339 return CircleOutside2PtConicalEffect::Create(ctx, procDataManager, shade
r, matrix, tm, |
| 1344 info); | 1340 info); |
| 1345 } | 1341 } |
| 1346 } | 1342 } |
| 1347 | 1343 |
| 1348 #endif | 1344 #endif |
| OLD | NEW |