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

Side by Side Diff: src/gpu/effects/GrRRectEffect.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
« no previous file with comments | « src/gpu/effects/GrOvalEffect.cpp ('k') | src/gpu/effects/GrSimpleTextureEffect.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrRRectEffect.h" 8 #include "GrRRectEffect.h"
9 9
10 #include "gl/GrGLEffect.h" 10 #include "gl/GrGLEffect.h"
(...skipping 26 matching lines...) Expand all
37 kBottom_CornerFlags = kBottomLeft_CornerFlag | kBottomRight_CornerFlag, 37 kBottom_CornerFlags = kBottomLeft_CornerFlag | kBottomRight_CornerFlag,
38 38
39 kAll_CornerFlags = kTopLeft_CornerFlag | kTopRight_CornerFlag | 39 kAll_CornerFlags = kTopLeft_CornerFlag | kTopRight_CornerFlag |
40 kBottomLeft_CornerFlag | kBottomRight_CornerFlag, 40 kBottomLeft_CornerFlag | kBottomRight_CornerFlag,
41 41
42 kNone_CornerFlags = 0 42 kNone_CornerFlags = 0
43 }; 43 };
44 44
45 // The flags are used to indicate which corners are circluar (unflagged corn ers are assumed to 45 // The flags are used to indicate which corners are circluar (unflagged corn ers are assumed to
46 // be square). 46 // be square).
47 static GrEffectRef* Create(GrEffectEdgeType, uint32_t circularCornerFlags, c onst SkRRect&); 47 static GrEffect* Create(GrEffectEdgeType, uint32_t circularCornerFlags, cons t SkRRect&);
48 48
49 virtual ~CircularRRectEffect() {}; 49 virtual ~CircularRRectEffect() {};
50 static const char* Name() { return "CircularRRect"; } 50 static const char* Name() { return "CircularRRect"; }
51 51
52 const SkRRect& getRRect() const { return fRRect; } 52 const SkRRect& getRRect() const { return fRRect; }
53 53
54 uint32_t getCircularCornerFlags() const { return fCircularCornerFlags; } 54 uint32_t getCircularCornerFlags() const { return fCircularCornerFlags; }
55 55
56 GrEffectEdgeType getEdgeType() const { return fEdgeType; } 56 GrEffectEdgeType getEdgeType() const { return fEdgeType; }
57 57
(...skipping 10 matching lines...) Expand all
68 68
69 SkRRect fRRect; 69 SkRRect fRRect;
70 GrEffectEdgeType fEdgeType; 70 GrEffectEdgeType fEdgeType;
71 uint32_t fCircularCornerFlags; 71 uint32_t fCircularCornerFlags;
72 72
73 GR_DECLARE_EFFECT_TEST; 73 GR_DECLARE_EFFECT_TEST;
74 74
75 typedef GrEffect INHERITED; 75 typedef GrEffect INHERITED;
76 }; 76 };
77 77
78 GrEffectRef* CircularRRectEffect::Create(GrEffectEdgeType edgeType, 78 GrEffect* CircularRRectEffect::Create(GrEffectEdgeType edgeType,
79 uint32_t circularCornerFlags, 79 uint32_t circularCornerFlags,
80 const SkRRect& rrect) { 80 const SkRRect& rrect) {
81 if (kFillAA_GrEffectEdgeType != edgeType && kInverseFillAA_GrEffectEdgeType != edgeType) { 81 if (kFillAA_GrEffectEdgeType != edgeType && kInverseFillAA_GrEffectEdgeType != edgeType) {
82 return NULL; 82 return NULL;
83 } 83 }
84 return SkNEW_ARGS(CircularRRectEffect, (edgeType, circularCornerFlags, rrect )); 84 return SkNEW_ARGS(CircularRRectEffect, (edgeType, circularCornerFlags, rrect ));
85 } 85 }
86 86
87 void CircularRRectEffect::getConstantColorComponents(GrColor* color, uint32_t* v alidFlags) const { 87 void CircularRRectEffect::getConstantColorComponents(GrColor* color, uint32_t* v alidFlags) const {
88 *validFlags = 0; 88 *validFlags = 0;
89 } 89 }
90 90
(...skipping 12 matching lines...) Expand all
103 bool CircularRRectEffect::onIsEqual(const GrEffect& other) const { 103 bool CircularRRectEffect::onIsEqual(const GrEffect& other) const {
104 const CircularRRectEffect& crre = CastEffect<CircularRRectEffect>(other); 104 const CircularRRectEffect& crre = CastEffect<CircularRRectEffect>(other);
105 // The corner flags are derived from fRRect, so no need to check them. 105 // The corner flags are derived from fRRect, so no need to check them.
106 return fEdgeType == crre.fEdgeType && fRRect == crre.fRRect; 106 return fEdgeType == crre.fEdgeType && fRRect == crre.fRRect;
107 } 107 }
108 108
109 ////////////////////////////////////////////////////////////////////////////// 109 //////////////////////////////////////////////////////////////////////////////
110 110
111 GR_DEFINE_EFFECT_TEST(CircularRRectEffect); 111 GR_DEFINE_EFFECT_TEST(CircularRRectEffect);
112 112
113 GrEffectRef* CircularRRectEffect::TestCreate(SkRandom* random, 113 GrEffect* CircularRRectEffect::TestCreate(SkRandom* random,
114 GrContext*, 114 GrContext*,
115 const GrDrawTargetCaps& caps, 115 const GrDrawTargetCaps& caps,
116 GrTexture*[]) { 116 GrTexture*[]) {
117 SkScalar w = random->nextRangeScalar(20.f, 1000.f); 117 SkScalar w = random->nextRangeScalar(20.f, 1000.f);
118 SkScalar h = random->nextRangeScalar(20.f, 1000.f); 118 SkScalar h = random->nextRangeScalar(20.f, 1000.f);
119 SkScalar r = random->nextRangeF(kRadiusMin, 9.f); 119 SkScalar r = random->nextRangeF(kRadiusMin, 9.f);
120 SkRRect rrect; 120 SkRRect rrect;
121 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); 121 rrect.setRectXY(SkRect::MakeWH(w, h), r, r);
122 GrEffectRef* effect; 122 GrEffect* effect;
123 do { 123 do {
124 GrEffectEdgeType et = (GrEffectEdgeType)random->nextULessThan(kGrEffectE dgeTypeCnt); 124 GrEffectEdgeType et = (GrEffectEdgeType)random->nextULessThan(kGrEffectE dgeTypeCnt);
125 effect = GrRRectEffect::Create(et, rrect); 125 effect = GrRRectEffect::Create(et, rrect);
126 } while (NULL == effect); 126 } while (NULL == effect);
127 return effect; 127 return effect;
128 } 128 }
129 129
130 ////////////////////////////////////////////////////////////////////////////// 130 //////////////////////////////////////////////////////////////////////////////
131 131
132 class GLCircularRRectEffect : public GrGLEffect { 132 class GLCircularRRectEffect : public GrGLEffect {
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 fPrevRRect = rrect; 375 fPrevRRect = rrect;
376 } 376 }
377 } 377 }
378 378
379 ////////////////////////////////////////////////////////////////////////////// 379 //////////////////////////////////////////////////////////////////////////////
380 380
381 class GLEllipticalRRectEffect; 381 class GLEllipticalRRectEffect;
382 382
383 class EllipticalRRectEffect : public GrEffect { 383 class EllipticalRRectEffect : public GrEffect {
384 public: 384 public:
385 static GrEffectRef* Create(GrEffectEdgeType, const SkRRect&); 385 static GrEffect* Create(GrEffectEdgeType, const SkRRect&);
386 386
387 virtual ~EllipticalRRectEffect() {}; 387 virtual ~EllipticalRRectEffect() {};
388 static const char* Name() { return "EllipticalRRect"; } 388 static const char* Name() { return "EllipticalRRect"; }
389 389
390 const SkRRect& getRRect() const { return fRRect; } 390 const SkRRect& getRRect() const { return fRRect; }
391 391
392 392
393 GrEffectEdgeType getEdgeType() const { return fEdgeType; } 393 GrEffectEdgeType getEdgeType() const { return fEdgeType; }
394 394
395 typedef GLEllipticalRRectEffect GLEffect; 395 typedef GLEllipticalRRectEffect GLEffect;
396 396
397 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; 397 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE;
398 398
399 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 399 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
400 400
401 private: 401 private:
402 EllipticalRRectEffect(GrEffectEdgeType, const SkRRect&); 402 EllipticalRRectEffect(GrEffectEdgeType, const SkRRect&);
403 403
404 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; 404 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
405 405
406 SkRRect fRRect; 406 SkRRect fRRect;
407 GrEffectEdgeType fEdgeType; 407 GrEffectEdgeType fEdgeType;
408 408
409 GR_DECLARE_EFFECT_TEST; 409 GR_DECLARE_EFFECT_TEST;
410 410
411 typedef GrEffect INHERITED; 411 typedef GrEffect INHERITED;
412 }; 412 };
413 413
414 GrEffectRef* EllipticalRRectEffect::Create(GrEffectEdgeType edgeType, const SkRR ect& rrect) { 414 GrEffect* EllipticalRRectEffect::Create(GrEffectEdgeType edgeType, const SkRRect & rrect) {
415 if (kFillAA_GrEffectEdgeType != edgeType && kInverseFillAA_GrEffectEdgeType != edgeType) { 415 if (kFillAA_GrEffectEdgeType != edgeType && kInverseFillAA_GrEffectEdgeType != edgeType) {
416 return NULL; 416 return NULL;
417 } 417 }
418 return SkNEW_ARGS(EllipticalRRectEffect, (edgeType, rrect)); 418 return SkNEW_ARGS(EllipticalRRectEffect, (edgeType, rrect));
419 } 419 }
420 420
421 void EllipticalRRectEffect::getConstantColorComponents(GrColor* color, uint32_t* validFlags) const { 421 void EllipticalRRectEffect::getConstantColorComponents(GrColor* color, uint32_t* validFlags) const {
422 *validFlags = 0; 422 *validFlags = 0;
423 } 423 }
424 424
425 const GrBackendEffectFactory& EllipticalRRectEffect::getFactory() const { 425 const GrBackendEffectFactory& EllipticalRRectEffect::getFactory() const {
426 return GrTBackendEffectFactory<EllipticalRRectEffect>::getInstance(); 426 return GrTBackendEffectFactory<EllipticalRRectEffect>::getInstance();
427 } 427 }
428 428
429 EllipticalRRectEffect::EllipticalRRectEffect(GrEffectEdgeType edgeType, const Sk RRect& rrect) 429 EllipticalRRectEffect::EllipticalRRectEffect(GrEffectEdgeType edgeType, const Sk RRect& rrect)
430 : fRRect(rrect) 430 : fRRect(rrect)
431 , fEdgeType(edgeType){ 431 , fEdgeType(edgeType){
432 this->setWillReadFragmentPosition(); 432 this->setWillReadFragmentPosition();
433 } 433 }
434 434
435 bool EllipticalRRectEffect::onIsEqual(const GrEffect& other) const { 435 bool EllipticalRRectEffect::onIsEqual(const GrEffect& other) const {
436 const EllipticalRRectEffect& erre = CastEffect<EllipticalRRectEffect>(other) ; 436 const EllipticalRRectEffect& erre = CastEffect<EllipticalRRectEffect>(other) ;
437 return fEdgeType == erre.fEdgeType && fRRect == erre.fRRect; 437 return fEdgeType == erre.fEdgeType && fRRect == erre.fRRect;
438 } 438 }
439 439
440 ////////////////////////////////////////////////////////////////////////////// 440 //////////////////////////////////////////////////////////////////////////////
441 441
442 GR_DEFINE_EFFECT_TEST(EllipticalRRectEffect); 442 GR_DEFINE_EFFECT_TEST(EllipticalRRectEffect);
443 443
444 GrEffectRef* EllipticalRRectEffect::TestCreate(SkRandom* random, 444 GrEffect* EllipticalRRectEffect::TestCreate(SkRandom* random,
445 GrContext*, 445 GrContext*,
446 const GrDrawTargetCaps& caps, 446 const GrDrawTargetCaps& caps,
447 GrTexture*[]) { 447 GrTexture*[]) {
448 SkScalar w = random->nextRangeScalar(20.f, 1000.f); 448 SkScalar w = random->nextRangeScalar(20.f, 1000.f);
449 SkScalar h = random->nextRangeScalar(20.f, 1000.f); 449 SkScalar h = random->nextRangeScalar(20.f, 1000.f);
450 SkVector r[4]; 450 SkVector r[4];
451 r[SkRRect::kUpperLeft_Corner].fX = random->nextRangeF(kRadiusMin, 9.f); 451 r[SkRRect::kUpperLeft_Corner].fX = random->nextRangeF(kRadiusMin, 9.f);
452 // ensure at least one corner really is elliptical 452 // ensure at least one corner really is elliptical
453 do { 453 do {
454 r[SkRRect::kUpperLeft_Corner].fY = random->nextRangeF(kRadiusMin, 9.f); 454 r[SkRRect::kUpperLeft_Corner].fY = random->nextRangeF(kRadiusMin, 9.f);
455 } while (r[SkRRect::kUpperLeft_Corner].fY == r[SkRRect::kUpperLeft_Corner].f X); 455 } while (r[SkRRect::kUpperLeft_Corner].fY == r[SkRRect::kUpperLeft_Corner].f X);
456 456
457 SkRRect rrect; 457 SkRRect rrect;
458 if (random->nextBool()) { 458 if (random->nextBool()) {
459 // half the time create a four-radii rrect. 459 // half the time create a four-radii rrect.
460 r[SkRRect::kLowerRight_Corner].fX = random->nextRangeF(kRadiusMin, 9.f); 460 r[SkRRect::kLowerRight_Corner].fX = random->nextRangeF(kRadiusMin, 9.f);
461 r[SkRRect::kLowerRight_Corner].fY = random->nextRangeF(kRadiusMin, 9.f); 461 r[SkRRect::kLowerRight_Corner].fY = random->nextRangeF(kRadiusMin, 9.f);
462 462
463 r[SkRRect::kUpperRight_Corner].fX = r[SkRRect::kLowerRight_Corner].fX; 463 r[SkRRect::kUpperRight_Corner].fX = r[SkRRect::kLowerRight_Corner].fX;
464 r[SkRRect::kUpperRight_Corner].fY = r[SkRRect::kUpperLeft_Corner].fY; 464 r[SkRRect::kUpperRight_Corner].fY = r[SkRRect::kUpperLeft_Corner].fY;
465 465
466 r[SkRRect::kLowerLeft_Corner].fX = r[SkRRect::kUpperLeft_Corner].fX; 466 r[SkRRect::kLowerLeft_Corner].fX = r[SkRRect::kUpperLeft_Corner].fX;
467 r[SkRRect::kLowerLeft_Corner].fY = r[SkRRect::kLowerRight_Corner].fY; 467 r[SkRRect::kLowerLeft_Corner].fY = r[SkRRect::kLowerRight_Corner].fY;
468 468
469 rrect.setRectRadii(SkRect::MakeWH(w, h), r); 469 rrect.setRectRadii(SkRect::MakeWH(w, h), r);
470 } else { 470 } else {
471 rrect.setRectXY(SkRect::MakeWH(w, h), r[SkRRect::kUpperLeft_Corner].fX, 471 rrect.setRectXY(SkRect::MakeWH(w, h), r[SkRRect::kUpperLeft_Corner].fX,
472 r[SkRRect::kUpperLeft_Corner].fY); 472 r[SkRRect::kUpperLeft_Corner].fY);
473 } 473 }
474 GrEffectRef* effect; 474 GrEffect* effect;
475 do { 475 do {
476 GrEffectEdgeType et = (GrEffectEdgeType)random->nextULessThan(kGrEffectE dgeTypeCnt); 476 GrEffectEdgeType et = (GrEffectEdgeType)random->nextULessThan(kGrEffectE dgeTypeCnt);
477 effect = GrRRectEffect::Create(et, rrect); 477 effect = GrRRectEffect::Create(et, rrect);
478 } while (NULL == effect); 478 } while (NULL == effect);
479 return effect; 479 return effect;
480 } 480 }
481 481
482 ////////////////////////////////////////////////////////////////////////////// 482 //////////////////////////////////////////////////////////////////////////////
483 483
484 class GLEllipticalRRectEffect : public GrGLEffect { 484 class GLEllipticalRRectEffect : public GrGLEffect {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 default: 624 default:
625 SkFAIL("RRect should always be simple or nine-patch."); 625 SkFAIL("RRect should always be simple or nine-patch.");
626 } 626 }
627 uman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.f Bottom); 627 uman.set4f(fInnerRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.f Bottom);
628 fPrevRRect = rrect; 628 fPrevRRect = rrect;
629 } 629 }
630 } 630 }
631 631
632 ////////////////////////////////////////////////////////////////////////////// 632 //////////////////////////////////////////////////////////////////////////////
633 633
634 GrEffectRef* GrRRectEffect::Create(GrEffectEdgeType edgeType, const SkRRect& rre ct) { 634 GrEffect* GrRRectEffect::Create(GrEffectEdgeType edgeType, const SkRRect& rrect) {
635 if (rrect.isRect()) { 635 if (rrect.isRect()) {
636 return GrConvexPolyEffect::Create(edgeType, rrect.getBounds()); 636 return GrConvexPolyEffect::Create(edgeType, rrect.getBounds());
637 } 637 }
638 638
639 if (rrect.isOval()) { 639 if (rrect.isOval()) {
640 return GrOvalEffect::Create(edgeType, rrect.getBounds()); 640 return GrOvalEffect::Create(edgeType, rrect.getBounds());
641 } 641 }
642 642
643 if (rrect.isSimple()) { 643 if (rrect.isSimple()) {
644 if (rrect.getSimpleRadii().fX < kRadiusMin || rrect.getSimpleRadii().fY < kRadiusMin) { 644 if (rrect.getSimpleRadii().fX < kRadiusMin || rrect.getSimpleRadii().fY < kRadiusMin) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 if (rrect.isNinePatch()) { 720 if (rrect.isNinePatch()) {
721 return EllipticalRRectEffect::Create(edgeType, rrect); 721 return EllipticalRRectEffect::Create(edgeType, rrect);
722 } 722 }
723 return NULL; 723 return NULL;
724 } 724 }
725 } 725 }
726 } 726 }
727 727
728 return NULL; 728 return NULL;
729 } 729 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrOvalEffect.cpp ('k') | src/gpu/effects/GrSimpleTextureEffect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698