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

Side by Side Diff: src/effects/gradients/SkTwoPointRadialGradient.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 2012 Google Inc. 3 * Copyright 2012 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 "SkTwoPointRadialGradient.h" 9 #include "SkTwoPointRadialGradient.h"
10 10
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 private: 427 private:
428 428
429 typedef GrGLGradientEffect INHERITED; 429 typedef GrGLGradientEffect INHERITED;
430 430
431 }; 431 };
432 432
433 ///////////////////////////////////////////////////////////////////// 433 /////////////////////////////////////////////////////////////////////
434 434
435 class GrRadial2Gradient : public GrGradientEffect { 435 class GrRadial2Gradient : public GrGradientEffect {
436 public: 436 public:
437 static GrEffectRef* Create(GrContext* ctx, 437 static GrEffect* Create(GrContext* ctx,
438 const SkTwoPointRadialGradient& shader, 438 const SkTwoPointRadialGradient& shader,
439 const SkMatrix& matrix, 439 const SkMatrix& matrix,
440 SkShader::TileMode tm) { 440 SkShader::TileMode tm) {
441 return SkNEW_ARGS(GrRadial2Gradient, (ctx, shader, matrix, tm)); 441 return SkNEW_ARGS(GrRadial2Gradient, (ctx, shader, matrix, tm));
442 } 442 }
443 443
444 virtual ~GrRadial2Gradient() { } 444 virtual ~GrRadial2Gradient() { }
445 445
446 static const char* Name() { return "Two-Point Radial Gradient"; } 446 static const char* Name() { return "Two-Point Radial Gradient"; }
447 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE { 447 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE {
448 return GrTBackendEffectFactory<GrRadial2Gradient>::getInstance(); 448 return GrTBackendEffectFactory<GrRadial2Gradient>::getInstance();
449 } 449 }
450 450
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 499
500 // @} 500 // @}
501 501
502 typedef GrGradientEffect INHERITED; 502 typedef GrGradientEffect INHERITED;
503 }; 503 };
504 504
505 ///////////////////////////////////////////////////////////////////// 505 /////////////////////////////////////////////////////////////////////
506 506
507 GR_DEFINE_EFFECT_TEST(GrRadial2Gradient); 507 GR_DEFINE_EFFECT_TEST(GrRadial2Gradient);
508 508
509 GrEffectRef* GrRadial2Gradient::TestCreate(SkRandom* random, 509 GrEffect* GrRadial2Gradient::TestCreate(SkRandom* random,
510 GrContext* context, 510 GrContext* context,
511 const GrDrawTargetCaps&, 511 const GrDrawTargetCaps&,
512 GrTexture**) { 512 GrTexture**) {
513 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()}; 513 SkPoint center1 = {random->nextUScalar1(), random->nextUScalar1()};
514 SkScalar radius1 = random->nextUScalar1(); 514 SkScalar radius1 = random->nextUScalar1();
515 SkPoint center2; 515 SkPoint center2;
516 SkScalar radius2; 516 SkScalar radius2;
517 do { 517 do {
518 center2.set(random->nextUScalar1(), random->nextUScalar1()); 518 center2.set(random->nextUScalar1(), random->nextUScalar1());
519 radius2 = random->nextUScalar1 (); 519 radius2 = random->nextUScalar1 ();
520 // There is a bug in two point radial gradients with identical radii 520 // There is a bug in two point radial gradients with identical radii
521 } while (radius1 == radius2); 521 } while (radius1 == radius2);
522 522
523 SkColor colors[kMaxRandomGradientColors]; 523 SkColor colors[kMaxRandomGradientColors];
524 SkScalar stopsArray[kMaxRandomGradientColors]; 524 SkScalar stopsArray[kMaxRandomGradientColors];
525 SkScalar* stops = stopsArray; 525 SkScalar* stops = stopsArray;
526 SkShader::TileMode tm; 526 SkShader::TileMode tm;
527 int colorCount = RandomGradientParams(random, colors, &stops, &tm); 527 int colorCount = RandomGradientParams(random, colors, &stops, &tm);
528 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointRadial(center1 , radius1, 528 SkAutoTUnref<SkShader> shader(SkGradientShader::CreateTwoPointRadial(center1 , radius1,
529 center2 , radius2, 529 center2 , radius2,
530 colors, stops, colorCount, 530 colors, stops, colorCount,
531 tm)); 531 tm));
532 SkPaint paint; 532 SkPaint paint;
533 GrEffectRef* effect; 533 GrEffect* effect;
534 GrColor grColor; 534 GrColor paintColor;
535 shader->asNewEffect(context, paint, NULL, &grColor, &effect); 535 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
536 return effect; 536 return effect;
537 } 537 }
538 538
539 ///////////////////////////////////////////////////////////////////// 539 /////////////////////////////////////////////////////////////////////
540 540
541 GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendEffectFactory& factory, 541 GrGLRadial2Gradient::GrGLRadial2Gradient(const GrBackendEffectFactory& factory,
542 const GrDrawEffect& drawEffect) 542 const GrDrawEffect& drawEffect)
543 : INHERITED(factory) 543 : INHERITED(factory)
544 , fVSVaryingName(NULL) 544 , fVSVaryingName(NULL)
545 , fFSVaryingName(NULL) 545 , fFSVaryingName(NULL)
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 EffectKey key = GenBaseGradientKey(drawEffect); 667 EffectKey key = GenBaseGradientKey(drawEffect);
668 if (drawEffect.castEffect<GrRadial2Gradient>().isDegenerate()) { 668 if (drawEffect.castEffect<GrRadial2Gradient>().isDegenerate()) {
669 key |= kIsDegenerate; 669 key |= kIsDegenerate;
670 } 670 }
671 return key; 671 return key;
672 } 672 }
673 673
674 ///////////////////////////////////////////////////////////////////// 674 /////////////////////////////////////////////////////////////////////
675 675
676 bool SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint& pa int, 676 bool SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint& pa int,
677 const SkMatrix* localMatrix, GrColor* grColor, 677 const SkMatrix* localMatrix, GrColor* paintColor,
678 GrEffectRef** grEffect) const { 678 GrEffect** effect) const {
679 SkASSERT(NULL != context); 679 SkASSERT(NULL != context);
680 680
681 // invert the localM, translate to center1 (fPtsToUni), rotate so center2 is on x axis. 681 // invert the localM, translate to center1 (fPtsToUni), rotate so center2 is on x axis.
682 SkMatrix matrix; 682 SkMatrix matrix;
683 if (!this->getLocalMatrix().invert(&matrix)) { 683 if (!this->getLocalMatrix().invert(&matrix)) {
684 return false; 684 return false;
685 } 685 }
686 if (localMatrix) { 686 if (localMatrix) {
687 SkMatrix inv; 687 SkMatrix inv;
688 if (!localMatrix->invert(&inv)) { 688 if (!localMatrix->invert(&inv)) {
689 return false; 689 return false;
690 } 690 }
691 matrix.postConcat(inv); 691 matrix.postConcat(inv);
692 } 692 }
693 matrix.postConcat(fPtsToUnit); 693 matrix.postConcat(fPtsToUnit);
694 694
695 SkScalar diffLen = fDiff.length(); 695 SkScalar diffLen = fDiff.length();
696 if (0 != diffLen) { 696 if (0 != diffLen) {
697 SkScalar invDiffLen = SkScalarInvert(diffLen); 697 SkScalar invDiffLen = SkScalarInvert(diffLen);
698 SkMatrix rot; 698 SkMatrix rot;
699 rot.setSinCos(-SkScalarMul(invDiffLen, fDiff.fY), 699 rot.setSinCos(-SkScalarMul(invDiffLen, fDiff.fY),
700 SkScalarMul(invDiffLen, fDiff.fX)); 700 SkScalarMul(invDiffLen, fDiff.fX));
701 matrix.postConcat(rot); 701 matrix.postConcat(rot);
702 } 702 }
703 703
704 *grColor = SkColor2GrColorJustAlpha(paint.getColor()); 704 *paintColor = SkColor2GrColorJustAlpha(paint.getColor());
705 *grEffect = GrRadial2Gradient::Create(context, *this, matrix, fTileMode); 705 *effect = GrRadial2Gradient::Create(context, *this, matrix, fTileMode);
706 706
707 return true; 707 return true;
708 } 708 }
709 709
710 #else 710 #else
711 711
712 bool SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint& pa int, 712 bool SkTwoPointRadialGradient::asNewEffect(GrContext* context, const SkPaint& pa int,
713 const SkMatrix* localMatrix, GrColor* grColor, 713 const SkMatrix* localMatrix, GrColor* paintColor,
714 GrEffect** grEffect) const { 714 GrEffect** effect) const {
715 SkDEBUGFAIL("Should not call in GPU-less build"); 715 SkDEBUGFAIL("Should not call in GPU-less build");
716 return false; 716 return false;
717 } 717 }
718 718
719 #endif 719 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp ('k') | src/gpu/GrAAConvexPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698