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 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, shaderDataManager, shader,
matrix, tm)); | 66 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, procDataManager, shader, m
atrix, 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 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 75 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
76 | 76 |
77 GrGLFragmentProcessor* createGLInstance() const override; | 77 GrGLFragmentProcessor* createGLInstance() const override; |
78 | 78 |
79 // 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. |
80 SkScalar center() const { return fCenterX1; } | 80 SkScalar center() const { return fCenterX1; } |
81 SkScalar diffRadius() const { return fDiffRadius; } | 81 SkScalar diffRadius() const { return fDiffRadius; } |
82 SkScalar radius() const { return fRadius0; } | 82 SkScalar radius() const { return fRadius0; } |
83 | 83 |
84 private: | 84 private: |
85 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 85 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
86 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); | 86 const Edge2PtConicalEffect& s = sBase.cast<Edge2PtConicalEffect>(); |
87 return (INHERITED::onIsEqual(sBase) && | 87 return (INHERITED::onIsEqual(sBase) && |
88 this->fCenterX1 == s.fCenterX1 && | 88 this->fCenterX1 == s.fCenterX1 && |
89 this->fRadius0 == s.fRadius0 && | 89 this->fRadius0 == s.fRadius0 && |
90 this->fDiffRadius == s.fDiffRadius); | 90 this->fDiffRadius == s.fDiffRadius); |
91 } | 91 } |
92 | 92 |
93 Edge2PtConicalEffect(GrContext* ctx, | 93 Edge2PtConicalEffect(GrContext* ctx, |
94 GrShaderDataManager* shaderDataManager, | 94 GrProcessorDataManager* procDataManager, |
95 const SkTwoPointConicalGradient& shader, | 95 const SkTwoPointConicalGradient& shader, |
96 const SkMatrix& matrix, | 96 const SkMatrix& matrix, |
97 SkShader::TileMode tm) | 97 SkShader::TileMode tm) |
98 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), | 98 : INHERITED(ctx, procDataManager, shader, matrix, tm), |
99 fCenterX1(shader.getCenterX1()), | 99 fCenterX1(shader.getCenterX1()), |
100 fRadius0(shader.getStartRadius()), | 100 fRadius0(shader.getStartRadius()), |
101 fDiffRadius(shader.getDiffRadius()){ | 101 fDiffRadius(shader.getDiffRadius()){ |
102 this->initClassID<Edge2PtConicalEffect>(); | 102 this->initClassID<Edge2PtConicalEffect>(); |
103 // 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 |
104 // 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 |
105 // 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 |
106 // 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 |
107 // need the sqrt value below | 107 // need the sqrt value below |
108 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) < | 108 SkASSERT(SkScalarAbs(SkScalarAbs(fDiffRadius) - fCenterX1) < |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 211 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
212 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 212 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
213 center
2, radius2, | 213 center
2, radius2, |
214 colors
, stops, colorCount, | 214 colors
, stops, colorCount, |
215 tm)); | 215 tm)); |
216 SkPaint paint; | 216 SkPaint paint; |
217 GrFragmentProcessor* fp; | 217 GrFragmentProcessor* fp; |
218 GrColor paintColor; | 218 GrColor paintColor; |
219 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 219 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
220 GrTest::TestMatrix(d->fRandom), N
ULL, | 220 GrTest::TestMatrix(d->fRandom), N
ULL, |
221 &paintColor, d->fShaderDataManage
r, &fp)); | 221 &paintColor, d->fProcDataManager,
&fp)); |
222 return fp; | 222 return fp; |
223 } | 223 } |
224 | 224 |
225 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&) | 225 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&) |
226 : fVSVaryingName(NULL) | 226 : fVSVaryingName(NULL) |
227 , fFSVaryingName(NULL) | 227 , fFSVaryingName(NULL) |
228 , fCachedRadius(-SK_ScalarMax) | 228 , fCachedRadius(-SK_ScalarMax) |
229 , fCachedDiffRadius(-SK_ScalarMax) {} | 229 , fCachedDiffRadius(-SK_ScalarMax) {} |
230 | 230 |
231 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder, | 231 void GLEdge2PtConicalEffect::emitCode(GrGLFPBuilder* builder, |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 | 372 |
373 return conicalType; | 373 return conicalType; |
374 } | 374 } |
375 | 375 |
376 ////////////////////////////////////////////////////////////////////////////// | 376 ////////////////////////////////////////////////////////////////////////////// |
377 | 377 |
378 class FocalOutside2PtConicalEffect : public GrGradientEffect { | 378 class FocalOutside2PtConicalEffect : public GrGradientEffect { |
379 public: | 379 public: |
380 | 380 |
381 static GrFragmentProcessor* Create(GrContext* ctx, | 381 static GrFragmentProcessor* Create(GrContext* ctx, |
382 GrShaderDataManager* shaderDataManager, | 382 GrProcessorDataManager* procDataManager, |
383 const SkTwoPointConicalGradient& shader, | 383 const SkTwoPointConicalGradient& shader, |
384 const SkMatrix& matrix, | 384 const SkMatrix& matrix, |
385 SkShader::TileMode tm, | 385 SkShader::TileMode tm, |
386 SkScalar focalX) { | 386 SkScalar focalX) { |
387 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, | 387 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, procDataManager, s
hader, matrix, tm, |
388 focalX)); | 388 focalX)); |
389 } | 389 } |
390 | 390 |
391 virtual ~FocalOutside2PtConicalEffect() { } | 391 virtual ~FocalOutside2PtConicalEffect() { } |
392 | 392 |
393 const char* name() const override { | 393 const char* name() const override { |
394 return "Two-Point Conical Gradient Focal Outside"; | 394 return "Two-Point Conical Gradient Focal Outside"; |
395 } | 395 } |
396 | 396 |
397 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 397 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
398 | 398 |
399 GrGLFragmentProcessor* createGLInstance() const override; | 399 GrGLFragmentProcessor* createGLInstance() const override; |
400 | 400 |
401 bool isFlipped() const { return fIsFlipped; } | 401 bool isFlipped() const { return fIsFlipped; } |
402 SkScalar focal() const { return fFocalX; } | 402 SkScalar focal() const { return fFocalX; } |
403 | 403 |
404 private: | 404 private: |
405 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 405 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
406 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica
lEffect>(); | 406 const FocalOutside2PtConicalEffect& s = sBase.cast<FocalOutside2PtConica
lEffect>(); |
407 return (INHERITED::onIsEqual(sBase) && | 407 return (INHERITED::onIsEqual(sBase) && |
408 this->fFocalX == s.fFocalX && | 408 this->fFocalX == s.fFocalX && |
409 this->fIsFlipped == s.fIsFlipped); | 409 this->fIsFlipped == s.fIsFlipped); |
410 } | 410 } |
411 | 411 |
412 FocalOutside2PtConicalEffect(GrContext* ctx, | 412 FocalOutside2PtConicalEffect(GrContext* ctx, |
413 GrShaderDataManager* shaderDataManager, | 413 GrProcessorDataManager* procDataManager, |
414 const SkTwoPointConicalGradient& shader, | 414 const SkTwoPointConicalGradient& shader, |
415 const SkMatrix& matrix, | 415 const SkMatrix& matrix, |
416 SkShader::TileMode tm, | 416 SkShader::TileMode tm, |
417 SkScalar focalX) | 417 SkScalar focalX) |
418 : INHERITED(ctx, shaderDataManager, shader, matrix, tm) | 418 : INHERITED(ctx, procDataManager, shader, matrix, tm) |
419 , fFocalX(focalX) | 419 , fFocalX(focalX) |
420 , fIsFlipped(shader.isFlippedGrad()) { | 420 , fIsFlipped(shader.isFlippedGrad()) { |
421 this->initClassID<FocalOutside2PtConicalEffect>(); | 421 this->initClassID<FocalOutside2PtConicalEffect>(); |
422 } | 422 } |
423 | 423 |
424 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 424 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
425 | 425 |
426 SkScalar fFocalX; | 426 SkScalar fFocalX; |
427 bool fIsFlipped; | 427 bool fIsFlipped; |
428 | 428 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 500 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
501 center
2, radius2, | 501 center
2, radius2, |
502 colors
, stops, colorCount, | 502 colors
, stops, colorCount, |
503 tm)); | 503 tm)); |
504 SkPaint paint; | 504 SkPaint paint; |
505 GrFragmentProcessor* effect; | 505 GrFragmentProcessor* effect; |
506 GrColor paintColor; | 506 GrColor paintColor; |
507 GrPaint grPaint; | 507 GrPaint grPaint; |
508 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 508 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
509 GrTest::TestMatrix(d->fRandom), N
ULL, | 509 GrTest::TestMatrix(d->fRandom), N
ULL, |
510 &paintColor, d->fShaderDataManage
r, | 510 &paintColor, d->fProcDataManager, |
511 &effect)); | 511 &effect)); |
512 return effect; | 512 return effect; |
513 } | 513 } |
514 | 514 |
515 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor
& processor) | 515 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor
& processor) |
516 : fVSVaryingName(NULL) | 516 : fVSVaryingName(NULL) |
517 , fFSVaryingName(NULL) | 517 , fFSVaryingName(NULL) |
518 , fCachedFocal(SK_ScalarMax) { | 518 , fCachedFocal(SK_ScalarMax) { |
519 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon
icalEffect>(); | 519 const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtCon
icalEffect>(); |
520 fIsFlipped = data.isFlipped(); | 520 fIsFlipped = data.isFlipped(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 } | 597 } |
598 | 598 |
599 ////////////////////////////////////////////////////////////////////////////// | 599 ////////////////////////////////////////////////////////////////////////////// |
600 | 600 |
601 class GLFocalInside2PtConicalEffect; | 601 class GLFocalInside2PtConicalEffect; |
602 | 602 |
603 class FocalInside2PtConicalEffect : public GrGradientEffect { | 603 class FocalInside2PtConicalEffect : public GrGradientEffect { |
604 public: | 604 public: |
605 | 605 |
606 static GrFragmentProcessor* Create(GrContext* ctx, | 606 static GrFragmentProcessor* Create(GrContext* ctx, |
607 GrShaderDataManager* shaderDataManager, | 607 GrProcessorDataManager* procDataManager, |
608 const SkTwoPointConicalGradient& shader, | 608 const SkTwoPointConicalGradient& shader, |
609 const SkMatrix& matrix, | 609 const SkMatrix& matrix, |
610 SkShader::TileMode tm, | 610 SkShader::TileMode tm, |
611 SkScalar focalX) { | 611 SkScalar focalX) { |
612 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, | 612 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, procDataManager, sh
ader, matrix, tm, |
613 focalX)); | 613 focalX)); |
614 } | 614 } |
615 | 615 |
616 virtual ~FocalInside2PtConicalEffect() {} | 616 virtual ~FocalInside2PtConicalEffect() {} |
617 | 617 |
618 const char* name() const override { | 618 const char* name() const override { |
619 return "Two-Point Conical Gradient Focal Inside"; | 619 return "Two-Point Conical Gradient Focal Inside"; |
620 } | 620 } |
621 | 621 |
622 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 622 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
623 | 623 |
624 GrGLFragmentProcessor* createGLInstance() const override; | 624 GrGLFragmentProcessor* createGLInstance() const override; |
625 | 625 |
626 SkScalar focal() const { return fFocalX; } | 626 SkScalar focal() const { return fFocalX; } |
627 | 627 |
628 typedef GLFocalInside2PtConicalEffect GLProcessor; | 628 typedef GLFocalInside2PtConicalEffect GLProcessor; |
629 | 629 |
630 private: | 630 private: |
631 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 631 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
632 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE
ffect>(); | 632 const FocalInside2PtConicalEffect& s = sBase.cast<FocalInside2PtConicalE
ffect>(); |
633 return (INHERITED::onIsEqual(sBase) && | 633 return (INHERITED::onIsEqual(sBase) && |
634 this->fFocalX == s.fFocalX); | 634 this->fFocalX == s.fFocalX); |
635 } | 635 } |
636 | 636 |
637 FocalInside2PtConicalEffect(GrContext* ctx, | 637 FocalInside2PtConicalEffect(GrContext* ctx, |
638 GrShaderDataManager* shaderDataManager, | 638 GrProcessorDataManager* procDataManager, |
639 const SkTwoPointConicalGradient& shader, | 639 const SkTwoPointConicalGradient& shader, |
640 const SkMatrix& matrix, | 640 const SkMatrix& matrix, |
641 SkShader::TileMode tm, | 641 SkShader::TileMode tm, |
642 SkScalar focalX) | 642 SkScalar focalX) |
643 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fFocalX(focalX)
{ | 643 : INHERITED(ctx, procDataManager, shader, matrix, tm), fFocalX(focalX) { |
644 this->initClassID<FocalInside2PtConicalEffect>(); | 644 this->initClassID<FocalInside2PtConicalEffect>(); |
645 } | 645 } |
646 | 646 |
647 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 647 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
648 | 648 |
649 SkScalar fFocalX; | 649 SkScalar fFocalX; |
650 | 650 |
651 typedef GrGradientEffect INHERITED; | 651 typedef GrGradientEffect INHERITED; |
652 }; | 652 }; |
653 | 653 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 721 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
722 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 722 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
723 center
2, radius2, | 723 center
2, radius2, |
724 colors
, stops, colorCount, | 724 colors
, stops, colorCount, |
725 tm)); | 725 tm)); |
726 SkPaint paint; | 726 SkPaint paint; |
727 GrColor paintColor; | 727 GrColor paintColor; |
728 GrFragmentProcessor* fp; | 728 GrFragmentProcessor* fp; |
729 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 729 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
730 GrTest::TestMatrix(d->fRandom), N
ULL, | 730 GrTest::TestMatrix(d->fRandom), N
ULL, |
731 &paintColor, d->fShaderDataManage
r, &fp)); | 731 &paintColor, d->fProcDataManager,
&fp)); |
732 return fp; | 732 return fp; |
733 } | 733 } |
734 | 734 |
735 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&) | 735 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&) |
736 : fVSVaryingName(NULL) | 736 : fVSVaryingName(NULL) |
737 , fFSVaryingName(NULL) | 737 , fFSVaryingName(NULL) |
738 , fCachedFocal(SK_ScalarMax) {} | 738 , fCachedFocal(SK_ScalarMax) {} |
739 | 739 |
740 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, | 740 void GLFocalInside2PtConicalEffect::emitCode(GrGLFPBuilder* builder, |
741 const GrFragmentProcessor& fp, | 741 const GrFragmentProcessor& fp, |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 if (A < 0.f) { | 844 if (A < 0.f) { |
845 return kInside_ConicalType; | 845 return kInside_ConicalType; |
846 } | 846 } |
847 return kOutside_ConicalType; | 847 return kOutside_ConicalType; |
848 } | 848 } |
849 | 849 |
850 class CircleInside2PtConicalEffect : public GrGradientEffect { | 850 class CircleInside2PtConicalEffect : public GrGradientEffect { |
851 public: | 851 public: |
852 | 852 |
853 static GrFragmentProcessor* Create(GrContext* ctx, | 853 static GrFragmentProcessor* Create(GrContext* ctx, |
854 GrShaderDataManager* shaderDataManager, | 854 GrProcessorDataManager* procDataManager, |
855 const SkTwoPointConicalGradient& shader, | 855 const SkTwoPointConicalGradient& shader, |
856 const SkMatrix& matrix, | 856 const SkMatrix& matrix, |
857 SkShader::TileMode tm, | 857 SkShader::TileMode tm, |
858 const CircleConicalInfo& info) { | 858 const CircleConicalInfo& info) { |
859 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shaderDataManager,
shader, matrix, tm, | 859 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, procDataManager, s
hader, matrix, tm, |
860 info)); | 860 info)); |
861 } | 861 } |
862 | 862 |
863 virtual ~CircleInside2PtConicalEffect() {} | 863 virtual ~CircleInside2PtConicalEffect() {} |
864 | 864 |
865 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } | 865 const char* name() const override { return "Two-Point Conical Gradient Insid
e"; } |
866 | 866 |
867 virtual void getGLProcessorKey(const GrGLSLCaps& caps, | 867 virtual void getGLProcessorKey(const GrGLSLCaps& caps, |
868 GrProcessorKeyBuilder* b) const override; | 868 GrProcessorKeyBuilder* b) const override; |
869 | 869 |
870 GrGLFragmentProcessor* createGLInstance() const override; | 870 GrGLFragmentProcessor* createGLInstance() const override; |
871 | 871 |
872 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } | 872 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } |
873 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } | 873 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } |
874 SkScalar A() const { return fInfo.fA; } | 874 SkScalar A() const { return fInfo.fA; } |
875 SkScalar B() const { return fInfo.fB; } | 875 SkScalar B() const { return fInfo.fB; } |
876 SkScalar C() const { return fInfo.fC; } | 876 SkScalar C() const { return fInfo.fC; } |
877 | 877 |
878 private: | 878 private: |
879 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 879 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
880 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica
lEffect>(); | 880 const CircleInside2PtConicalEffect& s = sBase.cast<CircleInside2PtConica
lEffect>(); |
881 return (INHERITED::onIsEqual(sBase) && | 881 return (INHERITED::onIsEqual(sBase) && |
882 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && | 882 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && |
883 this->fInfo.fA == s.fInfo.fA && | 883 this->fInfo.fA == s.fInfo.fA && |
884 this->fInfo.fB == s.fInfo.fB && | 884 this->fInfo.fB == s.fInfo.fB && |
885 this->fInfo.fC == s.fInfo.fC); | 885 this->fInfo.fC == s.fInfo.fC); |
886 } | 886 } |
887 | 887 |
888 CircleInside2PtConicalEffect(GrContext* ctx, | 888 CircleInside2PtConicalEffect(GrContext* ctx, |
889 GrShaderDataManager* shaderDataManager, | 889 GrProcessorDataManager* procDataManager, |
890 const SkTwoPointConicalGradient& shader, | 890 const SkTwoPointConicalGradient& shader, |
891 const SkMatrix& matrix, | 891 const SkMatrix& matrix, |
892 SkShader::TileMode tm, | 892 SkShader::TileMode tm, |
893 const CircleConicalInfo& info) | 893 const CircleConicalInfo& info) |
894 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fInfo(info) { | 894 : INHERITED(ctx, procDataManager, shader, matrix, tm), fInfo(info) { |
895 this->initClassID<CircleInside2PtConicalEffect>(); | 895 this->initClassID<CircleInside2PtConicalEffect>(); |
896 } | 896 } |
897 | 897 |
898 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 898 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
899 | 899 |
900 const CircleConicalInfo fInfo; | 900 const CircleConicalInfo fInfo; |
901 | 901 |
902 typedef GrGradientEffect INHERITED; | 902 typedef GrGradientEffect INHERITED; |
903 }; | 903 }; |
904 | 904 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 977 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
978 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 978 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
979 center
2, radius2, | 979 center
2, radius2, |
980 colors
, stops, colorCount, | 980 colors
, stops, colorCount, |
981 tm)); | 981 tm)); |
982 SkPaint paint; | 982 SkPaint paint; |
983 GrColor paintColor; | 983 GrColor paintColor; |
984 GrFragmentProcessor* fp; | 984 GrFragmentProcessor* fp; |
985 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 985 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
986 GrTest::TestMatrix(d->fRandom), N
ULL, | 986 GrTest::TestMatrix(d->fRandom), N
ULL, |
987 &paintColor, d->fShaderDataManage
r, &fp)); | 987 &paintColor, d->fProcDataManager,
&fp)); |
988 return fp; | 988 return fp; |
989 } | 989 } |
990 | 990 |
991 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor
& processor) | 991 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor
& processor) |
992 : fVSVaryingName(NULL) | 992 : fVSVaryingName(NULL) |
993 , fFSVaryingName(NULL) | 993 , fFSVaryingName(NULL) |
994 , fCachedCenterX(SK_ScalarMax) | 994 , fCachedCenterX(SK_ScalarMax) |
995 , fCachedCenterY(SK_ScalarMax) | 995 , fCachedCenterY(SK_ScalarMax) |
996 , fCachedA(SK_ScalarMax) | 996 , fCachedA(SK_ScalarMax) |
997 , fCachedB(SK_ScalarMax) | 997 , fCachedB(SK_ScalarMax) |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 const GrGLSLCaps&, GrProcessorKeyBui
lder* b) { | 1069 const GrGLSLCaps&, GrProcessorKeyBui
lder* b) { |
1070 b->add32(GenBaseGradientKey(processor)); | 1070 b->add32(GenBaseGradientKey(processor)); |
1071 } | 1071 } |
1072 | 1072 |
1073 ////////////////////////////////////////////////////////////////////////////// | 1073 ////////////////////////////////////////////////////////////////////////////// |
1074 | 1074 |
1075 class CircleOutside2PtConicalEffect : public GrGradientEffect { | 1075 class CircleOutside2PtConicalEffect : public GrGradientEffect { |
1076 public: | 1076 public: |
1077 | 1077 |
1078 static GrFragmentProcessor* Create(GrContext* ctx, | 1078 static GrFragmentProcessor* Create(GrContext* ctx, |
1079 GrShaderDataManager* shaderDataManager, | 1079 GrProcessorDataManager* procDataManager, |
1080 const SkTwoPointConicalGradient& shader, | 1080 const SkTwoPointConicalGradient& shader, |
1081 const SkMatrix& matrix, | 1081 const SkMatrix& matrix, |
1082 SkShader::TileMode tm, | 1082 SkShader::TileMode tm, |
1083 const CircleConicalInfo& info) { | 1083 const CircleConicalInfo& info) { |
1084 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shaderDataManager
, shader, matrix, | 1084 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, procDataManager,
shader, matrix, |
1085 tm, info)); | 1085 tm, info)); |
1086 } | 1086 } |
1087 | 1087 |
1088 virtual ~CircleOutside2PtConicalEffect() {} | 1088 virtual ~CircleOutside2PtConicalEffect() {} |
1089 | 1089 |
1090 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } | 1090 const char* name() const override { return "Two-Point Conical Gradient Outsi
de"; } |
1091 | 1091 |
1092 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; | 1092 void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const over
ride; |
1093 | 1093 |
1094 GrGLFragmentProcessor* createGLInstance() const override; | 1094 GrGLFragmentProcessor* createGLInstance() const override; |
(...skipping 12 matching lines...) Expand all Loading... |
1107 return (INHERITED::onIsEqual(sBase) && | 1107 return (INHERITED::onIsEqual(sBase) && |
1108 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && | 1108 this->fInfo.fCenterEnd == s.fInfo.fCenterEnd && |
1109 this->fInfo.fA == s.fInfo.fA && | 1109 this->fInfo.fA == s.fInfo.fA && |
1110 this->fInfo.fB == s.fInfo.fB && | 1110 this->fInfo.fB == s.fInfo.fB && |
1111 this->fInfo.fC == s.fInfo.fC && | 1111 this->fInfo.fC == s.fInfo.fC && |
1112 this->fTLimit == s.fTLimit && | 1112 this->fTLimit == s.fTLimit && |
1113 this->fIsFlipped == s.fIsFlipped); | 1113 this->fIsFlipped == s.fIsFlipped); |
1114 } | 1114 } |
1115 | 1115 |
1116 CircleOutside2PtConicalEffect(GrContext* ctx, | 1116 CircleOutside2PtConicalEffect(GrContext* ctx, |
1117 GrShaderDataManager* shaderDataManager, | 1117 GrProcessorDataManager* procDataManager, |
1118 const SkTwoPointConicalGradient& shader, | 1118 const SkTwoPointConicalGradient& shader, |
1119 const SkMatrix& matrix, | 1119 const SkMatrix& matrix, |
1120 SkShader::TileMode tm, | 1120 SkShader::TileMode tm, |
1121 const CircleConicalInfo& info) | 1121 const CircleConicalInfo& info) |
1122 : INHERITED(ctx, shaderDataManager, shader, matrix, tm), fInfo(info) { | 1122 : INHERITED(ctx, procDataManager, shader, matrix, tm), fInfo(info) { |
1123 this->initClassID<CircleOutside2PtConicalEffect>(); | 1123 this->initClassID<CircleOutside2PtConicalEffect>(); |
1124 if (shader.getStartRadius() != shader.getEndRadius()) { | 1124 if (shader.getStartRadius() != shader.getEndRadius()) { |
1125 fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shade
r.getEndRadius()); | 1125 fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shade
r.getEndRadius()); |
1126 } else { | 1126 } else { |
1127 fTLimit = SK_ScalarMin; | 1127 fTLimit = SK_ScalarMin; |
1128 } | 1128 } |
1129 | 1129 |
1130 fIsFlipped = shader.isFlippedGrad(); | 1130 fIsFlipped = shader.isFlippedGrad(); |
1131 } | 1131 } |
1132 | 1132 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1217 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 1217 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
1218 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, | 1218 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center
1, radius1, |
1219 center
2, radius2, | 1219 center
2, radius2, |
1220 colors
, stops, colorCount, | 1220 colors
, stops, colorCount, |
1221 tm)); | 1221 tm)); |
1222 SkPaint paint; | 1222 SkPaint paint; |
1223 GrColor paintColor; | 1223 GrColor paintColor; |
1224 GrFragmentProcessor* fp; | 1224 GrFragmentProcessor* fp; |
1225 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, | 1225 SkAssertResult(shader->asFragmentProcessor(d->fContext, paint, |
1226 GrTest::TestMatrix(d->fRandom), N
ULL, | 1226 GrTest::TestMatrix(d->fRandom), N
ULL, |
1227 &paintColor, d->fShaderDataManage
r, &fp)); | 1227 &paintColor, d->fProcDataManager,
&fp)); |
1228 return fp; | 1228 return fp; |
1229 } | 1229 } |
1230 | 1230 |
1231 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcess
or& processor) | 1231 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcess
or& processor) |
1232 : fVSVaryingName(NULL) | 1232 : fVSVaryingName(NULL) |
1233 , fFSVaryingName(NULL) | 1233 , fFSVaryingName(NULL) |
1234 , fCachedCenterX(SK_ScalarMax) | 1234 , fCachedCenterX(SK_ScalarMax) |
1235 , fCachedCenterY(SK_ScalarMax) | 1235 , fCachedCenterY(SK_ScalarMax) |
1236 , fCachedA(SK_ScalarMax) | 1236 , fCachedA(SK_ScalarMax) |
1237 , fCachedB(SK_ScalarMax) | 1237 , fCachedB(SK_ScalarMax) |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1332 void GLCircleOutside2PtConicalEffect::GenKey(const GrProcessor& processor, | 1332 void GLCircleOutside2PtConicalEffect::GenKey(const GrProcessor& processor, |
1333 const GrGLSLCaps&, GrProcessorKeyBu
ilder* b) { | 1333 const GrGLSLCaps&, GrProcessorKeyBu
ilder* b) { |
1334 uint32_t* key = b->add32n(2); | 1334 uint32_t* key = b->add32n(2); |
1335 key[0] = GenBaseGradientKey(processor); | 1335 key[0] = GenBaseGradientKey(processor); |
1336 key[1] = processor.cast<CircleOutside2PtConicalEffect>().isFlipped(); | 1336 key[1] = processor.cast<CircleOutside2PtConicalEffect>().isFlipped(); |
1337 } | 1337 } |
1338 | 1338 |
1339 ////////////////////////////////////////////////////////////////////////////// | 1339 ////////////////////////////////////////////////////////////////////////////// |
1340 | 1340 |
1341 GrFragmentProcessor* Gr2PtConicalGradientEffect::Create(GrContext* ctx, | 1341 GrFragmentProcessor* Gr2PtConicalGradientEffect::Create(GrContext* ctx, |
1342 GrShaderDataManager* sha
derDataManager, | 1342 GrProcessorDataManager*
procDataManager, |
1343 const SkTwoPointConicalG
radient& shader, | 1343 const SkTwoPointConicalG
radient& shader, |
1344 SkShader::TileMode tm, | 1344 SkShader::TileMode tm, |
1345 const SkMatrix* localMat
rix) { | 1345 const SkMatrix* localMat
rix) { |
1346 SkMatrix matrix; | 1346 SkMatrix matrix; |
1347 if (!shader.getLocalMatrix().invert(&matrix)) { | 1347 if (!shader.getLocalMatrix().invert(&matrix)) { |
1348 return NULL; | 1348 return NULL; |
1349 } | 1349 } |
1350 if (localMatrix) { | 1350 if (localMatrix) { |
1351 SkMatrix inv; | 1351 SkMatrix inv; |
1352 if (!localMatrix->invert(&inv)) { | 1352 if (!localMatrix->invert(&inv)) { |
1353 return NULL; | 1353 return NULL; |
1354 } | 1354 } |
1355 matrix.postConcat(inv); | 1355 matrix.postConcat(inv); |
1356 } | 1356 } |
1357 | 1357 |
1358 if (shader.getStartRadius() < kErrorTol) { | 1358 if (shader.getStartRadius() < kErrorTol) { |
1359 SkScalar focalX; | 1359 SkScalar focalX; |
1360 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); | 1360 ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); |
1361 if (type == kInside_ConicalType) { | 1361 if (type == kInside_ConicalType) { |
1362 return FocalInside2PtConicalEffect::Create(ctx, shaderDataManager, s
hader, matrix, tm, | 1362 return FocalInside2PtConicalEffect::Create(ctx, procDataManager, sha
der, matrix, tm, |
1363 focalX); | 1363 focalX); |
1364 } else if(type == kEdge_ConicalType) { | 1364 } else if(type == kEdge_ConicalType) { |
1365 set_matrix_edge_conical(shader, &matrix); | 1365 set_matrix_edge_conical(shader, &matrix); |
1366 return Edge2PtConicalEffect::Create(ctx, shaderDataManager, shader,
matrix, tm); | 1366 return Edge2PtConicalEffect::Create(ctx, procDataManager, shader, ma
trix, tm); |
1367 } else { | 1367 } else { |
1368 return FocalOutside2PtConicalEffect::Create(ctx, shaderDataManager,
shader, matrix, tm, | 1368 return FocalOutside2PtConicalEffect::Create(ctx, procDataManager, sh
ader, matrix, tm, |
1369 focalX); | 1369 focalX); |
1370 } | 1370 } |
1371 } | 1371 } |
1372 | 1372 |
1373 CircleConicalInfo info; | 1373 CircleConicalInfo info; |
1374 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); | 1374 ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); |
1375 | 1375 |
1376 if (type == kInside_ConicalType) { | 1376 if (type == kInside_ConicalType) { |
1377 return CircleInside2PtConicalEffect::Create(ctx, shaderDataManager, sha
der, matrix, tm, | 1377 return CircleInside2PtConicalEffect::Create(ctx, procDataManager, shade
r, matrix, tm, |
1378 info); | 1378 info); |
1379 } else if (type == kEdge_ConicalType) { | 1379 } else if (type == kEdge_ConicalType) { |
1380 set_matrix_edge_conical(shader, &matrix); | 1380 set_matrix_edge_conical(shader, &matrix); |
1381 return Edge2PtConicalEffect::Create(ctx, shaderDataManager, shader, matr
ix, tm); | 1381 return Edge2PtConicalEffect::Create(ctx, procDataManager, shader, matrix
, tm); |
1382 } else { | 1382 } else { |
1383 return CircleOutside2PtConicalEffect::Create(ctx, shaderDataManager, sha
der, matrix, tm, | 1383 return CircleOutside2PtConicalEffect::Create(ctx, procDataManager, shade
r, matrix, tm, |
1384 info); | 1384 info); |
1385 } | 1385 } |
1386 } | 1386 } |
1387 | 1387 |
1388 #endif | 1388 #endif |
OLD | NEW |