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

Side by Side Diff: src/gpu/effects/GrRRectEffect.cpp

Issue 1434313002: Make all GrFragmentProcessors GL independent. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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/GrPorterDuffXferProcessor.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 "GrConvexPolyEffect.h" 10 #include "GrConvexPolyEffect.h"
11 #include "GrFragmentProcessor.h" 11 #include "GrFragmentProcessor.h"
12 #include "GrInvariantOutput.h" 12 #include "GrInvariantOutput.h"
13 #include "GrOvalEffect.h" 13 #include "GrOvalEffect.h"
14 #include "SkRRect.h" 14 #include "SkRRect.h"
15 #include "gl/GrGLFragmentProcessor.h" 15 #include "glsl/GrGLSLFragmentProcessor.h"
16 #include "glsl/GrGLSLFragmentShaderBuilder.h" 16 #include "glsl/GrGLSLFragmentShaderBuilder.h"
17 #include "glsl/GrGLSLProgramBuilder.h" 17 #include "glsl/GrGLSLProgramBuilder.h"
18 #include "glsl/GrGLSLProgramDataManager.h" 18 #include "glsl/GrGLSLProgramDataManager.h"
19 19
20 // The effects defined here only handle rrect radii >= kRadiusMin. 20 // The effects defined here only handle rrect radii >= kRadiusMin.
21 static const SkScalar kRadiusMin = SK_ScalarHalf; 21 static const SkScalar kRadiusMin = SK_ScalarHalf;
22 22
23 ////////////////////////////////////////////////////////////////////////////// 23 //////////////////////////////////////////////////////////////////////////////
24 24
25 class CircularRRectEffect : public GrFragmentProcessor { 25 class CircularRRectEffect : public GrFragmentProcessor {
(...skipping 27 matching lines...) Expand all
53 53
54 const SkRRect& getRRect() const { return fRRect; } 54 const SkRRect& getRRect() const { return fRRect; }
55 55
56 uint32_t getCircularCornerFlags() const { return fCircularCornerFlags; } 56 uint32_t getCircularCornerFlags() const { return fCircularCornerFlags; }
57 57
58 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 58 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
59 59
60 private: 60 private:
61 CircularRRectEffect(GrPrimitiveEdgeType, uint32_t circularCornerFlags, const SkRRect&); 61 CircularRRectEffect(GrPrimitiveEdgeType, uint32_t circularCornerFlags, const SkRRect&);
62 62
63 GrGLFragmentProcessor* onCreateGLInstance() const override; 63 GrGLSLFragmentProcessor* onCreateGLInstance() const override;
64 64
65 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 65 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
66 66
67 bool onIsEqual(const GrFragmentProcessor& other) const override; 67 bool onIsEqual(const GrFragmentProcessor& other) const override;
68 68
69 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 69 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
70 70
71 SkRRect fRRect; 71 SkRRect fRRect;
72 GrPrimitiveEdgeType fEdgeType; 72 GrPrimitiveEdgeType fEdgeType;
73 uint32_t fCircularCornerFlags; 73 uint32_t fCircularCornerFlags;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 do { 119 do {
120 GrPrimitiveEdgeType et = 120 GrPrimitiveEdgeType et =
121 (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeT ypeCnt); 121 (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeT ypeCnt);
122 fp = GrRRectEffect::Create(et, rrect); 122 fp = GrRRectEffect::Create(et, rrect);
123 } while (nullptr == fp); 123 } while (nullptr == fp);
124 return fp; 124 return fp;
125 } 125 }
126 126
127 ////////////////////////////////////////////////////////////////////////////// 127 //////////////////////////////////////////////////////////////////////////////
128 128
129 class GLCircularRRectEffect : public GrGLFragmentProcessor { 129 class GLCircularRRectEffect : public GrGLSLFragmentProcessor {
130 public: 130 public:
131 GLCircularRRectEffect(const GrProcessor&); 131 GLCircularRRectEffect(const GrProcessor&);
132 132
133 virtual void emitCode(EmitArgs&) override; 133 virtual void emitCode(EmitArgs&) override;
134 134
135 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 135 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
136 136
137 protected: 137 protected:
138 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 138 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
139 139
140 private: 140 private:
141 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform; 141 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform;
142 GrGLSLProgramDataManager::UniformHandle fRadiusPlusHalfUniform; 142 GrGLSLProgramDataManager::UniformHandle fRadiusPlusHalfUniform;
143 SkRRect fPrevRRect; 143 SkRRect fPrevRRect;
144 typedef GrGLFragmentProcessor INHERITED; 144 typedef GrGLSLFragmentProcessor INHERITED;
145 }; 145 };
146 146
147 GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) { 147 GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) {
148 fPrevRRect.setEmpty(); 148 fPrevRRect.setEmpty();
149 } 149 }
150 150
151 void GLCircularRRectEffect::emitCode(EmitArgs& args) { 151 void GLCircularRRectEffect::emitCode(EmitArgs& args) {
152 const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>(); 152 const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>();
153 const char *rectName; 153 const char *rectName;
154 const char *radiusPlusHalfName; 154 const char *radiusPlusHalfName;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 } 362 }
363 } 363 }
364 364
365 //////////////////////////////////////////////////////////////////////////////// //////////////////// 365 //////////////////////////////////////////////////////////////////////////////// ////////////////////
366 366
367 void CircularRRectEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 367 void CircularRRectEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
368 GrProcessorKeyBuilder* b) const { 368 GrProcessorKeyBuilder* b) const {
369 GLCircularRRectEffect::GenKey(*this, caps, b); 369 GLCircularRRectEffect::GenKey(*this, caps, b);
370 } 370 }
371 371
372 GrGLFragmentProcessor* CircularRRectEffect::onCreateGLInstance() const { 372 GrGLSLFragmentProcessor* CircularRRectEffect::onCreateGLInstance() const {
373 return new GLCircularRRectEffect(*this); 373 return new GLCircularRRectEffect(*this);
374 } 374 }
375 375
376 ////////////////////////////////////////////////////////////////////////////// 376 //////////////////////////////////////////////////////////////////////////////
377 377
378 class EllipticalRRectEffect : public GrFragmentProcessor { 378 class EllipticalRRectEffect : public GrFragmentProcessor {
379 public: 379 public:
380 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkRRect&); 380 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkRRect&);
381 381
382 virtual ~EllipticalRRectEffect() {}; 382 virtual ~EllipticalRRectEffect() {};
383 383
384 const char* name() const override { return "EllipticalRRect"; } 384 const char* name() const override { return "EllipticalRRect"; }
385 385
386 const SkRRect& getRRect() const { return fRRect; } 386 const SkRRect& getRRect() const { return fRRect; }
387 387
388 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 388 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
389 389
390 private: 390 private:
391 EllipticalRRectEffect(GrPrimitiveEdgeType, const SkRRect&); 391 EllipticalRRectEffect(GrPrimitiveEdgeType, const SkRRect&);
392 392
393 GrGLFragmentProcessor* onCreateGLInstance() const override; 393 GrGLSLFragmentProcessor* onCreateGLInstance() const override;
394 394
395 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 395 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
396 396
397 bool onIsEqual(const GrFragmentProcessor& other) const override; 397 bool onIsEqual(const GrFragmentProcessor& other) const override;
398 398
399 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 399 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
400 400
401 SkRRect fRRect; 401 SkRRect fRRect;
402 GrPrimitiveEdgeType fEdgeType; 402 GrPrimitiveEdgeType fEdgeType;
403 403
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 do { 465 do {
466 GrPrimitiveEdgeType et = 466 GrPrimitiveEdgeType et =
467 (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeT ypeCnt); 467 (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeT ypeCnt);
468 fp = GrRRectEffect::Create(et, rrect); 468 fp = GrRRectEffect::Create(et, rrect);
469 } while (nullptr == fp); 469 } while (nullptr == fp);
470 return fp; 470 return fp;
471 } 471 }
472 472
473 ////////////////////////////////////////////////////////////////////////////// 473 //////////////////////////////////////////////////////////////////////////////
474 474
475 class GLEllipticalRRectEffect : public GrGLFragmentProcessor { 475 class GLEllipticalRRectEffect : public GrGLSLFragmentProcessor {
476 public: 476 public:
477 GLEllipticalRRectEffect(const GrProcessor&); 477 GLEllipticalRRectEffect(const GrProcessor&);
478 478
479 virtual void emitCode(EmitArgs&) override; 479 virtual void emitCode(EmitArgs&) override;
480 480
481 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 481 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
482 482
483 protected: 483 protected:
484 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 484 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
485 485
486 private: 486 private:
487 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform; 487 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform;
488 GrGLSLProgramDataManager::UniformHandle fInvRadiiSqdUniform; 488 GrGLSLProgramDataManager::UniformHandle fInvRadiiSqdUniform;
489 SkRRect fPrevRRect; 489 SkRRect fPrevRRect;
490 typedef GrGLFragmentProcessor INHERITED; 490 typedef GrGLSLFragmentProcessor INHERITED;
491 }; 491 };
492 492
493 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) { 493 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) {
494 fPrevRRect.setEmpty(); 494 fPrevRRect.setEmpty();
495 } 495 }
496 496
497 void GLEllipticalRRectEffect::emitCode(EmitArgs& args) { 497 void GLEllipticalRRectEffect::emitCode(EmitArgs& args) {
498 const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>(); 498 const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>();
499 const char *rectName; 499 const char *rectName;
500 // The inner rect is the rrect bounds inset by the x/y radii 500 // The inner rect is the rrect bounds inset by the x/y radii
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 } 613 }
614 } 614 }
615 615
616 //////////////////////////////////////////////////////////////////////////////// //////////////////// 616 //////////////////////////////////////////////////////////////////////////////// ////////////////////
617 617
618 void EllipticalRRectEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 618 void EllipticalRRectEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
619 GrProcessorKeyBuilder* b) const { 619 GrProcessorKeyBuilder* b) const {
620 GLEllipticalRRectEffect::GenKey(*this, caps, b); 620 GLEllipticalRRectEffect::GenKey(*this, caps, b);
621 } 621 }
622 622
623 GrGLFragmentProcessor* EllipticalRRectEffect::onCreateGLInstance() const { 623 GrGLSLFragmentProcessor* EllipticalRRectEffect::onCreateGLInstance() const {
624 return new GLEllipticalRRectEffect(*this); 624 return new GLEllipticalRRectEffect(*this);
625 } 625 }
626 626
627 ////////////////////////////////////////////////////////////////////////////// 627 //////////////////////////////////////////////////////////////////////////////
628 628
629 GrFragmentProcessor* GrRRectEffect::Create(GrPrimitiveEdgeType edgeType, const S kRRect& rrect) { 629 GrFragmentProcessor* GrRRectEffect::Create(GrPrimitiveEdgeType edgeType, const S kRRect& rrect) {
630 if (rrect.isRect()) { 630 if (rrect.isRect()) {
631 return GrConvexPolyEffect::Create(edgeType, rrect.getBounds()); 631 return GrConvexPolyEffect::Create(edgeType, rrect.getBounds());
632 } 632 }
633 633
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 if (rrect.isNinePatch()) { 715 if (rrect.isNinePatch()) {
716 return EllipticalRRectEffect::Create(edgeType, rrect); 716 return EllipticalRRectEffect::Create(edgeType, rrect);
717 } 717 }
718 return nullptr; 718 return nullptr;
719 } 719 }
720 } 720 }
721 } 721 }
722 722
723 return nullptr; 723 return nullptr;
724 } 724 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrPorterDuffXferProcessor.cpp ('k') | src/gpu/effects/GrSimpleTextureEffect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698