Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(471)

Side by Side Diff: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp

Issue 374923002: Goodbye GrEffectRef. (Closed) Base URL: https://skia.googlesource.com/skia.git@noref3
Patch Set: Address comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 GLEdge2PtConicalEffect; 57 class GLEdge2PtConicalEffect;
58 58
59 class Edge2PtConicalEffect : public GrGradientEffect { 59 class Edge2PtConicalEffect : public GrGradientEffect {
60 public: 60 public:
61 61
62 static GrEffectRef* Create(GrContext* ctx, 62 static GrEffect* Create(GrContext* ctx,
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, shader, matrix, tm)); 66 return SkNEW_ARGS(Edge2PtConicalEffect, (ctx, shader, matrix, tm));
67 } 67 }
68 68
69 virtual ~Edge2PtConicalEffect() {} 69 virtual ~Edge2PtConicalEffect() {}
70 70
71 static const char* Name() { return "Two-Point Conical Gradient Edge Touching "; } 71 static const char* Name() { return "Two-Point Conical Gradient Edge Touching "; }
72 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 72 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
73 73
74 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation. 74 // The radial gradient parameters can collapse to a linear (instead of quadr atic) equation.
75 SkScalar center() const { return fCenterX1; } 75 SkScalar center() const { return fCenterX1; }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 typedef GrGLGradientEffect INHERITED; 165 typedef GrGLGradientEffect INHERITED;
166 166
167 }; 167 };
168 168
169 const GrBackendEffectFactory& Edge2PtConicalEffect::getFactory() const { 169 const GrBackendEffectFactory& Edge2PtConicalEffect::getFactory() const {
170 return GrTBackendEffectFactory<Edge2PtConicalEffect>::getInstance(); 170 return GrTBackendEffectFactory<Edge2PtConicalEffect>::getInstance();
171 } 171 }
172 172
173 GR_DEFINE_EFFECT_TEST(Edge2PtConicalEffect); 173 GR_DEFINE_EFFECT_TEST(Edge2PtConicalEffect);
174 174
175 GrEffectRef* Edge2PtConicalEffect::TestCreate(SkRandom* random, 175 GrEffect* Edge2PtConicalEffect::TestCreate(SkRandom* random,
176 GrContext* context, 176 GrContext* context,
177 const GrDrawTargetCaps&, 177 const GrDrawTargetCaps&,
178 GrTexture**) { 178 GrTexture**) {
179 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 179 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
180 SkScalar radius1 = random->nextUScalar1(); 180 SkScalar radius1 = random->nextUScalar1();
181 SkPoint center2; 181 SkPoint center2;
182 SkScalar radius2; 182 SkScalar radius2;
183 do { 183 do {
184 center2.set(random->nextUScalar1(), random->nextUScalar1()); 184 center2.set(random->nextUScalar1(), random->nextUScalar1());
185 // If the circles are identical the factory will give us an empty shader . 185 // If the circles are identical the factory will give us an empty shader .
186 // This will happen if we pick identical centers 186 // This will happen if we pick identical centers
187 } while (center1 == center2); 187 } while (center1 == center2);
188 188
189 // Below makes sure that circle one is contained within circle two 189 // Below makes sure that circle one is contained within circle two
190 // and both circles are touching on an edge 190 // and both circles are touching on an edge
191 SkPoint diff = center2 - center1; 191 SkPoint diff = center2 - center1;
192 SkScalar diffLen = diff.length(); 192 SkScalar diffLen = diff.length();
193 radius2 = radius1 + diffLen; 193 radius2 = radius1 + diffLen;
194 194
195 SkColor colors[kMaxRandomGradientColors]; 195 SkColor colors[kMaxRandomGradientColors];
196 SkScalar stopsArray[kMaxRandomGradientColors]; 196 SkScalar stopsArray[kMaxRandomGradientColors];
197 SkScalar* stops = stopsArray; 197 SkScalar* stops = stopsArray;
198 SkShader::TileMode tm; 198 SkShader::TileMode tm;
199 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 199 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
200 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1, 200 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1,
201 center 2, radius2, 201 center 2, radius2,
202 colors , stops, colorCount, 202 colors , stops, colorCount,
203 tm)); 203 tm));
204 SkPaint paint; 204 SkPaint paint;
205 GrEffectRef* effect; 205 GrEffect* effect;
206 GrColor grColor; 206 GrColor paintColor;
207 shader->asNewEffect(context, paint, NULL, &grColor, &effect); 207 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
208 return effect; 208 return effect;
209 } 209 }
210 210
211 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac tory, 211 GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrBackendEffectFactory& fac tory,
212 const GrDrawEffect& drawEffect) 212 const GrDrawEffect& drawEffect)
213 : INHERITED(factory) 213 : INHERITED(factory)
214 , fVSVaryingName(NULL) 214 , fVSVaryingName(NULL)
215 , fFSVaryingName(NULL) 215 , fFSVaryingName(NULL)
216 , fCachedRadius(-SK_ScalarMax) 216 , fCachedRadius(-SK_ScalarMax)
217 , fCachedDiffRadius(-SK_ScalarMax) {} 217 , fCachedDiffRadius(-SK_ScalarMax) {}
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 return conicalType; 358 return conicalType;
359 } 359 }
360 360
361 ////////////////////////////////////////////////////////////////////////////// 361 //////////////////////////////////////////////////////////////////////////////
362 362
363 class GLFocalOutside2PtConicalEffect; 363 class GLFocalOutside2PtConicalEffect;
364 364
365 class FocalOutside2PtConicalEffect : public GrGradientEffect { 365 class FocalOutside2PtConicalEffect : public GrGradientEffect {
366 public: 366 public:
367 367
368 static GrEffectRef* Create(GrContext* ctx, 368 static GrEffect* Create(GrContext* ctx,
369 const SkTwoPointConicalGradient& shader, 369 const SkTwoPointConicalGradient& shader,
370 const SkMatrix& matrix, 370 const SkMatrix& matrix,
371 SkShader::TileMode tm, 371 SkShader::TileMode tm,
372 SkScalar focalX) { 372 SkScalar focalX) {
373 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX)); 373 return SkNEW_ARGS(FocalOutside2PtConicalEffect, (ctx, shader, matrix, tm , focalX));
374 } 374 }
375 375
376 virtual ~FocalOutside2PtConicalEffect() { } 376 virtual ~FocalOutside2PtConicalEffect() { }
377 377
378 static const char* Name() { return "Two-Point Conical Gradient Focal Outside "; } 378 static const char* Name() { return "Two-Point Conical Gradient Focal Outside "; }
379 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 379 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
380 380
381 bool isFlipped() const { return fIsFlipped; } 381 bool isFlipped() const { return fIsFlipped; }
382 SkScalar focal() const { return fFocalX; } 382 SkScalar focal() const { return fFocalX; }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 typedef GrGLGradientEffect INHERITED; 441 typedef GrGLGradientEffect INHERITED;
442 442
443 }; 443 };
444 444
445 const GrBackendEffectFactory& FocalOutside2PtConicalEffect::getFactory() const { 445 const GrBackendEffectFactory& FocalOutside2PtConicalEffect::getFactory() const {
446 return GrTBackendEffectFactory<FocalOutside2PtConicalEffect>::getInstance(); 446 return GrTBackendEffectFactory<FocalOutside2PtConicalEffect>::getInstance();
447 } 447 }
448 448
449 GR_DEFINE_EFFECT_TEST(FocalOutside2PtConicalEffect); 449 GR_DEFINE_EFFECT_TEST(FocalOutside2PtConicalEffect);
450 450
451 GrEffectRef* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random, 451 GrEffect* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random,
452 GrContext* context, 452 GrContext* context,
453 const GrDrawTargetCaps&, 453 const GrDrawTargetCaps&,
454 GrTexture**) { 454 GrTexture**) {
455 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 455 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
456 SkScalar radius1 = 0.f; 456 SkScalar radius1 = 0.f;
457 SkPoint center2; 457 SkPoint center2;
458 SkScalar radius2; 458 SkScalar radius2;
459 do { 459 do {
460 center2.set(random->nextUScalar1(), random->nextUScalar1()); 460 center2.set(random->nextUScalar1(), random->nextUScalar1());
461 // Need to make sure the centers are not the same or else focal point wi ll be inside 461 // Need to make sure the centers are not the same or else focal point wi ll be inside
462 } while (center1 == center2); 462 } while (center1 == center2);
463 SkPoint diff = center2 - center1; 463 SkPoint diff = center2 - center1;
464 SkScalar diffLen = diff.length(); 464 SkScalar diffLen = diff.length();
465 // Below makes sure that the focal point is not contained within circle two 465 // Below makes sure that the focal point is not contained within circle two
466 radius2 = random->nextRangeF(0.f, diffLen); 466 radius2 = random->nextRangeF(0.f, diffLen);
467 467
468 SkColor colors[kMaxRandomGradientColors]; 468 SkColor colors[kMaxRandomGradientColors];
469 SkScalar stopsArray[kMaxRandomGradientColors]; 469 SkScalar stopsArray[kMaxRandomGradientColors];
470 SkScalar* stops = stopsArray; 470 SkScalar* stops = stopsArray;
471 SkShader::TileMode tm; 471 SkShader::TileMode tm;
472 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 472 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
473 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1, 473 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1,
474 center 2, radius2, 474 center 2, radius2,
475 colors , stops, colorCount, 475 colors , stops, colorCount,
476 tm)); 476 tm));
477 SkPaint paint; 477 SkPaint paint;
478 GrEffectRef* effect; 478 GrEffect* effect;
479 GrColor grColor; 479 GrColor paintColor;
480 shader->asNewEffect(context, paint, NULL, &grColor, &effect); 480 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
481 return effect; 481 return effect;
482 } 482 }
483 483
484 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendEf fectFactory& factory, 484 GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrBackendEf fectFactory& factory,
485 const GrDrawEffec t& drawEffect) 485 const GrDrawEffec t& drawEffect)
486 : INHERITED(factory) 486 : INHERITED(factory)
487 , fVSVaryingName(NULL) 487 , fVSVaryingName(NULL)
488 , fFSVaryingName(NULL) 488 , fFSVaryingName(NULL)
489 , fCachedFocal(SK_ScalarMax) { 489 , fCachedFocal(SK_ScalarMax) {
490 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid e2PtConicalEffect>(); 490 const FocalOutside2PtConicalEffect& data = drawEffect.castEffect<FocalOutsid e2PtConicalEffect>();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 return key; 572 return key;
573 } 573 }
574 574
575 ////////////////////////////////////////////////////////////////////////////// 575 //////////////////////////////////////////////////////////////////////////////
576 576
577 class GLFocalInside2PtConicalEffect; 577 class GLFocalInside2PtConicalEffect;
578 578
579 class FocalInside2PtConicalEffect : public GrGradientEffect { 579 class FocalInside2PtConicalEffect : public GrGradientEffect {
580 public: 580 public:
581 581
582 static GrEffectRef* Create(GrContext* ctx, 582 static GrEffect* Create(GrContext* ctx,
583 const SkTwoPointConicalGradient& shader, 583 const SkTwoPointConicalGradient& shader,
584 const SkMatrix& matrix, 584 const SkMatrix& matrix,
585 SkShader::TileMode tm, 585 SkShader::TileMode tm,
586 SkScalar focalX) { 586 SkScalar focalX) {
587 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX)); 587 return SkNEW_ARGS(FocalInside2PtConicalEffect, (ctx, shader, matrix, tm, focalX));
588 } 588 }
589 589
590 virtual ~FocalInside2PtConicalEffect() {} 590 virtual ~FocalInside2PtConicalEffect() {}
591 591
592 static const char* Name() { return "Two-Point Conical Gradient Focal Inside" ; } 592 static const char* Name() { return "Two-Point Conical Gradient Focal Inside" ; }
593 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 593 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
594 594
595 SkScalar focal() const { return fFocalX; } 595 SkScalar focal() const { return fFocalX; }
596 596
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 typedef GrGLGradientEffect INHERITED; 650 typedef GrGLGradientEffect INHERITED;
651 651
652 }; 652 };
653 653
654 const GrBackendEffectFactory& FocalInside2PtConicalEffect::getFactory() const { 654 const GrBackendEffectFactory& FocalInside2PtConicalEffect::getFactory() const {
655 return GrTBackendEffectFactory<FocalInside2PtConicalEffect>::getInstance(); 655 return GrTBackendEffectFactory<FocalInside2PtConicalEffect>::getInstance();
656 } 656 }
657 657
658 GR_DEFINE_EFFECT_TEST(FocalInside2PtConicalEffect); 658 GR_DEFINE_EFFECT_TEST(FocalInside2PtConicalEffect);
659 659
660 GrEffectRef* FocalInside2PtConicalEffect::TestCreate(SkRandom* random, 660 GrEffect* FocalInside2PtConicalEffect::TestCreate(SkRandom* random,
661 GrContext* context, 661 GrContext* context,
662 const GrDrawTargetCaps&, 662 const GrDrawTargetCaps&,
663 GrTexture**) { 663 GrTexture**) {
664 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 664 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
665 SkScalar radius1 = 0.f; 665 SkScalar radius1 = 0.f;
666 SkPoint center2; 666 SkPoint center2;
667 SkScalar radius2; 667 SkScalar radius2;
668 do { 668 do {
669 center2.set(random->nextUScalar1(), random->nextUScalar1()); 669 center2.set(random->nextUScalar1(), random->nextUScalar1());
670 // Below makes sure radius2 is larger enouch such that the focal point 670 // Below makes sure radius2 is larger enouch such that the focal point
671 // is inside the end circle 671 // is inside the end circle
672 SkScalar increase = random->nextUScalar1(); 672 SkScalar increase = random->nextUScalar1();
673 SkPoint diff = center2 - center1; 673 SkPoint diff = center2 - center1;
674 SkScalar diffLen = diff.length(); 674 SkScalar diffLen = diff.length();
675 radius2 = diffLen + increase; 675 radius2 = diffLen + increase;
676 // If the circles are identical the factory will give us an empty shader . 676 // If the circles are identical the factory will give us an empty shader .
677 } while (radius1 == radius2 && center1 == center2); 677 } while (radius1 == radius2 && center1 == center2);
678 678
679 SkColor colors[kMaxRandomGradientColors]; 679 SkColor colors[kMaxRandomGradientColors];
680 SkScalar stopsArray[kMaxRandomGradientColors]; 680 SkScalar stopsArray[kMaxRandomGradientColors];
681 SkScalar* stops = stopsArray; 681 SkScalar* stops = stopsArray;
682 SkShader::TileMode tm; 682 SkShader::TileMode tm;
683 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 683 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
684 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1, 684 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1,
685 center 2, radius2, 685 center 2, radius2,
686 colors , stops, colorCount, 686 colors , stops, colorCount,
687 tm)); 687 tm));
688 SkPaint paint; 688 SkPaint paint;
689 GrColor grColor; 689 GrColor paintColor;
690 GrEffectRef* grEffect; 690 GrEffect* effect;
691 shader->asNewEffect(context, paint, NULL, &grColor, &grEffect); 691 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
692 return grEffect; 692 return effect;
693 } 693 }
694 694
695 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe ctFactory& factory, 695 GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrBackendEffe ctFactory& factory,
696 const GrDrawEffect& drawEffect) 696 const GrDrawEffect& drawEffect)
697 : INHERITED(factory) 697 : INHERITED(factory)
698 , fVSVaryingName(NULL) 698 , fVSVaryingName(NULL)
699 , fFSVaryingName(NULL) 699 , fFSVaryingName(NULL)
700 , fCachedFocal(SK_ScalarMax) {} 700 , fCachedFocal(SK_ScalarMax) {}
701 701
702 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder, 702 void GLFocalInside2PtConicalEffect::emitCode(GrGLShaderBuilder* builder,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 return kInside_ConicalType; 805 return kInside_ConicalType;
806 } 806 }
807 return kOutside_ConicalType; 807 return kOutside_ConicalType;
808 } 808 }
809 809
810 class GLCircleInside2PtConicalEffect; 810 class GLCircleInside2PtConicalEffect;
811 811
812 class CircleInside2PtConicalEffect : public GrGradientEffect { 812 class CircleInside2PtConicalEffect : public GrGradientEffect {
813 public: 813 public:
814 814
815 static GrEffectRef* Create(GrContext* ctx, 815 static GrEffect* Create(GrContext* ctx,
816 const SkTwoPointConicalGradient& shader, 816 const SkTwoPointConicalGradient& shader,
817 const SkMatrix& matrix, 817 const SkMatrix& matrix,
818 SkShader::TileMode tm, 818 SkShader::TileMode tm,
819 const CircleConicalInfo& info) { 819 const CircleConicalInfo& info) {
820 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info)); 820 return SkNEW_ARGS(CircleInside2PtConicalEffect, (ctx, shader, matrix, tm , info));
821 } 821 }
822 822
823 virtual ~CircleInside2PtConicalEffect() {} 823 virtual ~CircleInside2PtConicalEffect() {}
824 824
825 static const char* Name() { return "Two-Point Conical Gradient Inside"; } 825 static const char* Name() { return "Two-Point Conical Gradient Inside"; }
826 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 826 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
827 827
828 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 828 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
829 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 829 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 typedef GrGLGradientEffect INHERITED; 895 typedef GrGLGradientEffect INHERITED;
896 896
897 }; 897 };
898 898
899 const GrBackendEffectFactory& CircleInside2PtConicalEffect::getFactory() const { 899 const GrBackendEffectFactory& CircleInside2PtConicalEffect::getFactory() const {
900 return GrTBackendEffectFactory<CircleInside2PtConicalEffect>::getInstance(); 900 return GrTBackendEffectFactory<CircleInside2PtConicalEffect>::getInstance();
901 } 901 }
902 902
903 GR_DEFINE_EFFECT_TEST(CircleInside2PtConicalEffect); 903 GR_DEFINE_EFFECT_TEST(CircleInside2PtConicalEffect);
904 904
905 GrEffectRef* CircleInside2PtConicalEffect::TestCreate(SkRandom* random, 905 GrEffect* CircleInside2PtConicalEffect::TestCreate(SkRandom* random,
906 GrContext* context, 906 GrContext* context,
907 const GrDrawTargetCaps&, 907 const GrDrawTargetCaps&,
908 GrTexture**) { 908 GrTexture**) {
909 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 909 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
910 SkScalar radius1 = random->nextUScalar1() + 0.0001f; // make sure radius1 != 0 910 SkScalar radius1 = random->nextUScalar1() + 0.0001f; // make sure radius1 != 0
911 SkPoint center2; 911 SkPoint center2;
912 SkScalar radius2; 912 SkScalar radius2;
913 do { 913 do {
914 center2.set(random->nextUScalar1(), random->nextUScalar1()); 914 center2.set(random->nextUScalar1(), random->nextUScalar1());
915 // Below makes sure that circle one is contained within circle two 915 // Below makes sure that circle one is contained within circle two
916 SkScalar increase = random->nextUScalar1(); 916 SkScalar increase = random->nextUScalar1();
917 SkPoint diff = center2 - center1; 917 SkPoint diff = center2 - center1;
918 SkScalar diffLen = diff.length(); 918 SkScalar diffLen = diff.length();
919 radius2 = radius1 + diffLen + increase; 919 radius2 = radius1 + diffLen + increase;
920 // If the circles are identical the factory will give us an empty shader . 920 // If the circles are identical the factory will give us an empty shader .
921 } while (radius1 == radius2 && center1 == center2); 921 } while (radius1 == radius2 && center1 == center2);
922 922
923 SkColor colors[kMaxRandomGradientColors]; 923 SkColor colors[kMaxRandomGradientColors];
924 SkScalar stopsArray[kMaxRandomGradientColors]; 924 SkScalar stopsArray[kMaxRandomGradientColors];
925 SkScalar* stops = stopsArray; 925 SkScalar* stops = stopsArray;
926 SkShader::TileMode tm; 926 SkShader::TileMode tm;
927 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 927 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
928 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1, 928 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1,
929 center 2, radius2, 929 center 2, radius2,
930 colors , stops, colorCount, 930 colors , stops, colorCount,
931 tm)); 931 tm));
932 SkPaint paint; 932 SkPaint paint;
933 GrColor grColor; 933 GrColor paintColor;
934 GrEffectRef* grEffect; 934 GrEffect* effect;
935 shader->asNewEffect(context, paint, NULL, &grColor, &grEffect); 935 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
936 return grEffect; 936 return effect;
937 } 937 }
938 938
939 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendEf fectFactory& factory, 939 GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrBackendEf fectFactory& factory,
940 const GrDrawEffec t& drawEffect) 940 const GrDrawEffec t& drawEffect)
941 : INHERITED(factory) 941 : INHERITED(factory)
942 , fVSVaryingName(NULL) 942 , fVSVaryingName(NULL)
943 , fFSVaryingName(NULL) 943 , fFSVaryingName(NULL)
944 , fCachedCenterX(SK_ScalarMax) 944 , fCachedCenterX(SK_ScalarMax)
945 , fCachedCenterY(SK_ScalarMax) 945 , fCachedCenterY(SK_ScalarMax)
946 , fCachedA(SK_ScalarMax) 946 , fCachedA(SK_ScalarMax)
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 return key; 1017 return key;
1018 } 1018 }
1019 1019
1020 ////////////////////////////////////////////////////////////////////////////// 1020 //////////////////////////////////////////////////////////////////////////////
1021 1021
1022 class GLCircleOutside2PtConicalEffect; 1022 class GLCircleOutside2PtConicalEffect;
1023 1023
1024 class CircleOutside2PtConicalEffect : public GrGradientEffect { 1024 class CircleOutside2PtConicalEffect : public GrGradientEffect {
1025 public: 1025 public:
1026 1026
1027 static GrEffectRef* Create(GrContext* ctx, 1027 static GrEffect* Create(GrContext* ctx,
1028 const SkTwoPointConicalGradient& shader, 1028 const SkTwoPointConicalGradient& shader,
1029 const SkMatrix& matrix, 1029 const SkMatrix& matrix,
1030 SkShader::TileMode tm, 1030 SkShader::TileMode tm,
1031 const CircleConicalInfo& info) { 1031 const CircleConicalInfo& info) {
1032 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info)); 1032 return SkNEW_ARGS(CircleOutside2PtConicalEffect, (ctx, shader, matrix, t m, info));
1033 } 1033 }
1034 1034
1035 virtual ~CircleOutside2PtConicalEffect() {} 1035 virtual ~CircleOutside2PtConicalEffect() {}
1036 1036
1037 static const char* Name() { return "Two-Point Conical Gradient Outside"; } 1037 static const char* Name() { return "Two-Point Conical Gradient Outside"; }
1038 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 1038 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
1039 1039
1040 SkScalar centerX() const { return fInfo.fCenterEnd.fX; } 1040 SkScalar centerX() const { return fInfo.fCenterEnd.fX; }
1041 SkScalar centerY() const { return fInfo.fCenterEnd.fY; } 1041 SkScalar centerY() const { return fInfo.fCenterEnd.fY; }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 typedef GrGLGradientEffect INHERITED; 1124 typedef GrGLGradientEffect INHERITED;
1125 1125
1126 }; 1126 };
1127 1127
1128 const GrBackendEffectFactory& CircleOutside2PtConicalEffect::getFactory() const { 1128 const GrBackendEffectFactory& CircleOutside2PtConicalEffect::getFactory() const {
1129 return GrTBackendEffectFactory<CircleOutside2PtConicalEffect>::getInstance() ; 1129 return GrTBackendEffectFactory<CircleOutside2PtConicalEffect>::getInstance() ;
1130 } 1130 }
1131 1131
1132 GR_DEFINE_EFFECT_TEST(CircleOutside2PtConicalEffect); 1132 GR_DEFINE_EFFECT_TEST(CircleOutside2PtConicalEffect);
1133 1133
1134 GrEffectRef* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random, 1134 GrEffect* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random,
1135 GrContext* context, 1135 GrContext* context,
1136 const GrDrawTargetCaps&, 1136 const GrDrawTargetCaps&,
1137 GrTexture**) { 1137 GrTexture**) {
1138 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 1138 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
1139 SkScalar radius1 = random->nextUScalar1() + 0.0001f; // make sure radius1 != 0 1139 SkScalar radius1 = random->nextUScalar1() + 0.0001f; // make sure radius1 != 0
1140 SkPoint center2; 1140 SkPoint center2;
1141 SkScalar radius2; 1141 SkScalar radius2;
1142 SkScalar diffLen; 1142 SkScalar diffLen;
1143 do { 1143 do {
1144 center2.set(random->nextUScalar1(), random->nextUScalar1()); 1144 center2.set(random->nextUScalar1(), random->nextUScalar1());
1145 // If the circles share a center than we can't be in the outside case 1145 // If the circles share a center than we can't be in the outside case
1146 } while (center1 == center2); 1146 } while (center1 == center2);
1147 SkPoint diff = center2 - center1; 1147 SkPoint diff = center2 - center1;
1148 diffLen = diff.length(); 1148 diffLen = diff.length();
1149 // Below makes sure that circle one is not contained within circle two 1149 // Below makes sure that circle one is not contained within circle two
1150 // and have radius2 >= radius to match sorting on cpu side 1150 // and have radius2 >= radius to match sorting on cpu side
1151 radius2 = radius1 + random->nextRangeF(0.f, diffLen); 1151 radius2 = radius1 + random->nextRangeF(0.f, diffLen);
1152 1152
1153 SkColor colors[kMaxRandomGradientColors]; 1153 SkColor colors[kMaxRandomGradientColors];
1154 SkScalar stopsArray[kMaxRandomGradientColors]; 1154 SkScalar stopsArray[kMaxRandomGradientColors];
1155 SkScalar* stops = stopsArray; 1155 SkScalar* stops = stopsArray;
1156 SkShader::TileMode tm; 1156 SkShader::TileMode tm;
1157 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 1157 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
1158 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1, 1158 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointConical(center 1, radius1,
1159 center 2, radius2, 1159 center 2, radius2,
1160 colors , stops, colorCount, 1160 colors , stops, colorCount,
1161 tm)); 1161 tm));
1162 SkPaint paint; 1162 SkPaint paint;
1163 GrColor grColor; 1163 GrColor paintColor;
1164 GrEffectRef* grEffect; 1164 GrEffect* effect;
1165 shader->asNewEffect(context, paint, NULL, &grColor, &grEffect); 1165 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
1166 return grEffect; 1166 return effect;
1167 } 1167 }
1168 1168
1169 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend EffectFactory& factory, 1169 GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrBackend EffectFactory& factory,
1170 const GrDrawEff ect& drawEffect) 1170 const GrDrawEff ect& drawEffect)
1171 : INHERITED(factory) 1171 : INHERITED(factory)
1172 , fVSVaryingName(NULL) 1172 , fVSVaryingName(NULL)
1173 , fFSVaryingName(NULL) 1173 , fFSVaryingName(NULL)
1174 , fCachedCenterX(SK_ScalarMax) 1174 , fCachedCenterX(SK_ScalarMax)
1175 , fCachedCenterY(SK_ScalarMax) 1175 , fCachedCenterY(SK_ScalarMax)
1176 , fCachedA(SK_ScalarMax) 1176 , fCachedA(SK_ScalarMax)
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 EffectKey key = GenBaseGradientKey(drawEffect); 1273 EffectKey key = GenBaseGradientKey(drawEffect);
1274 1274
1275 if (drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped()) { 1275 if (drawEffect.castEffect<CircleOutside2PtConicalEffect>().isFlipped()) {
1276 key |= kIsFlipped; 1276 key |= kIsFlipped;
1277 } 1277 }
1278 return key; 1278 return key;
1279 } 1279 }
1280 1280
1281 ////////////////////////////////////////////////////////////////////////////// 1281 //////////////////////////////////////////////////////////////////////////////
1282 1282
1283 GrEffectRef* Gr2PtConicalGradientEffect::Create(GrContext* ctx, 1283 GrEffect* Gr2PtConicalGradientEffect::Create(GrContext* ctx,
1284 const SkTwoPointConicalGradient& shader, 1284 const SkTwoPointConicalGradient& sh ader,
1285 SkShader::TileMode tm, 1285 SkShader::TileMode tm,
1286 const SkMatrix* localMatrix) { 1286 const SkMatrix* localMatrix) {
1287 SkMatrix matrix; 1287 SkMatrix matrix;
1288 if (!shader.getLocalMatrix().invert(&matrix)) { 1288 if (!shader.getLocalMatrix().invert(&matrix)) {
1289 return NULL; 1289 return NULL;
1290 } 1290 }
1291 if (localMatrix) { 1291 if (localMatrix) {
1292 SkMatrix inv; 1292 SkMatrix inv;
1293 if (!localMatrix->invert(&inv)) { 1293 if (!localMatrix->invert(&inv)) {
1294 return NULL; 1294 return NULL;
1295 } 1295 }
1296 matrix.postConcat(inv); 1296 matrix.postConcat(inv);
(...skipping 19 matching lines...) Expand all
1316 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o); 1316 return CircleInside2PtConicalEffect::Create(ctx, shader, matrix, tm, inf o);
1317 } else if (type == kEdge_ConicalType) { 1317 } else if (type == kEdge_ConicalType) {
1318 set_matrix_edge_conical(shader, &matrix); 1318 set_matrix_edge_conical(shader, &matrix);
1319 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm); 1319 return Edge2PtConicalEffect::Create(ctx, shader, matrix, tm);
1320 } else { 1320 } else {
1321 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo); 1321 return CircleOutside2PtConicalEffect::Create(ctx, shader, matrix, tm, in fo);
1322 } 1322 }
1323 } 1323 }
1324 1324
1325 #endif 1325 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkTwoPointConicalGradient.cpp ('k') | src/effects/gradients/SkTwoPointRadialGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698