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

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

Issue 1428543003: Create GLSL base class for ProgramDataManager (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add space 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/GrTextureDomain.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 "gl/GrGLFragmentProcessor.h"
16 #include "gl/builders/GrGLProgramBuilder.h" 16 #include "gl/builders/GrGLProgramBuilder.h"
17 #include "glsl/GrGLSLProgramDataManager.h"
17 18
18 // The effects defined here only handle rrect radii >= kRadiusMin. 19 // The effects defined here only handle rrect radii >= kRadiusMin.
19 static const SkScalar kRadiusMin = SK_ScalarHalf; 20 static const SkScalar kRadiusMin = SK_ScalarHalf;
20 21
21 ////////////////////////////////////////////////////////////////////////////// 22 //////////////////////////////////////////////////////////////////////////////
22 23
23 class CircularRRectEffect : public GrFragmentProcessor { 24 class CircularRRectEffect : public GrFragmentProcessor {
24 public: 25 public:
25 26
26 enum CornerFlags { 27 enum CornerFlags {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 127
127 class GLCircularRRectEffect : public GrGLFragmentProcessor { 128 class GLCircularRRectEffect : public GrGLFragmentProcessor {
128 public: 129 public:
129 GLCircularRRectEffect(const GrProcessor&); 130 GLCircularRRectEffect(const GrProcessor&);
130 131
131 virtual void emitCode(EmitArgs&) override; 132 virtual void emitCode(EmitArgs&) override;
132 133
133 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 134 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
134 135
135 protected: 136 protected:
136 void onSetData(const GrGLProgramDataManager&, const GrProcessor&) override; 137 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
137 138
138 private: 139 private:
139 GrGLProgramDataManager::UniformHandle fInnerRectUniform; 140 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform;
140 GrGLProgramDataManager::UniformHandle fRadiusPlusHalfUniform; 141 GrGLSLProgramDataManager::UniformHandle fRadiusPlusHalfUniform;
141 SkRRect fPrevRRect; 142 SkRRect fPrevRRect;
142 typedef GrGLFragmentProcessor INHERITED; 143 typedef GrGLFragmentProcessor INHERITED;
143 }; 144 };
144 145
145 GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) { 146 GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) {
146 fPrevRRect.setEmpty(); 147 fPrevRRect.setEmpty();
147 } 148 }
148 149
149 void GLCircularRRectEffect::emitCode(EmitArgs& args) { 150 void GLCircularRRectEffect::emitCode(EmitArgs& args) {
150 const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>(); 151 const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha") ).c_str()); 275 (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha") ).c_str());
275 } 276 }
276 277
277 void GLCircularRRectEffect::GenKey(const GrProcessor& processor, const GrGLSLCap s&, 278 void GLCircularRRectEffect::GenKey(const GrProcessor& processor, const GrGLSLCap s&,
278 GrProcessorKeyBuilder* b) { 279 GrProcessorKeyBuilder* b) {
279 const CircularRRectEffect& crre = processor.cast<CircularRRectEffect>(); 280 const CircularRRectEffect& crre = processor.cast<CircularRRectEffect>();
280 GR_STATIC_ASSERT(kGrProcessorEdgeTypeCnt <= 8); 281 GR_STATIC_ASSERT(kGrProcessorEdgeTypeCnt <= 8);
281 b->add32((crre.getCircularCornerFlags() << 3) | crre.getEdgeType()); 282 b->add32((crre.getCircularCornerFlags() << 3) | crre.getEdgeType());
282 } 283 }
283 284
284 void GLCircularRRectEffect::onSetData(const GrGLProgramDataManager& pdman, 285 void GLCircularRRectEffect::onSetData(const GrGLSLProgramDataManager& pdman,
285 const GrProcessor& processor) { 286 const GrProcessor& processor) {
286 const CircularRRectEffect& crre = processor.cast<CircularRRectEffect>(); 287 const CircularRRectEffect& crre = processor.cast<CircularRRectEffect>();
287 const SkRRect& rrect = crre.getRRect(); 288 const SkRRect& rrect = crre.getRRect();
288 if (rrect != fPrevRRect) { 289 if (rrect != fPrevRRect) {
289 SkRect rect = rrect.getBounds(); 290 SkRect rect = rrect.getBounds();
290 SkScalar radius = 0; 291 SkScalar radius = 0;
291 switch (crre.getCircularCornerFlags()) { 292 switch (crre.getCircularCornerFlags()) {
292 case CircularRRectEffect::kAll_CornerFlags: 293 case CircularRRectEffect::kAll_CornerFlags:
293 SkASSERT(rrect.isSimpleCircular()); 294 SkASSERT(rrect.isSimpleCircular());
294 radius = rrect.getSimpleRadii().fX; 295 radius = rrect.getSimpleRadii().fX;
295 SkASSERT(radius >= kRadiusMin); 296 SkASSERT(radius >= kRadiusMin);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 473
473 class GLEllipticalRRectEffect : public GrGLFragmentProcessor { 474 class GLEllipticalRRectEffect : public GrGLFragmentProcessor {
474 public: 475 public:
475 GLEllipticalRRectEffect(const GrProcessor&); 476 GLEllipticalRRectEffect(const GrProcessor&);
476 477
477 virtual void emitCode(EmitArgs&) override; 478 virtual void emitCode(EmitArgs&) override;
478 479
479 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 480 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
480 481
481 protected: 482 protected:
482 void onSetData(const GrGLProgramDataManager&, const GrProcessor&) override; 483 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
483 484
484 private: 485 private:
485 GrGLProgramDataManager::UniformHandle fInnerRectUniform; 486 GrGLSLProgramDataManager::UniformHandle fInnerRectUniform;
486 GrGLProgramDataManager::UniformHandle fInvRadiiSqdUniform; 487 GrGLSLProgramDataManager::UniformHandle fInvRadiiSqdUniform;
487 SkRRect fPrevRRect; 488 SkRRect fPrevRRect;
488 typedef GrGLFragmentProcessor INHERITED; 489 typedef GrGLFragmentProcessor INHERITED;
489 }; 490 };
490 491
491 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) { 492 GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) {
492 fPrevRRect.setEmpty(); 493 fPrevRRect.setEmpty();
493 } 494 }
494 495
495 void GLEllipticalRRectEffect::emitCode(EmitArgs& args) { 496 void GLEllipticalRRectEffect::emitCode(EmitArgs& args) {
496 const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>(); 497 const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha") ).c_str()); 566 (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha") ).c_str());
566 } 567 }
567 568
568 void GLEllipticalRRectEffect::GenKey(const GrProcessor& effect, const GrGLSLCaps &, 569 void GLEllipticalRRectEffect::GenKey(const GrProcessor& effect, const GrGLSLCaps &,
569 GrProcessorKeyBuilder* b) { 570 GrProcessorKeyBuilder* b) {
570 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); 571 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>();
571 GR_STATIC_ASSERT(kLast_GrProcessorEdgeType < (1 << 3)); 572 GR_STATIC_ASSERT(kLast_GrProcessorEdgeType < (1 << 3));
572 b->add32(erre.getRRect().getType() | erre.getEdgeType() << 3); 573 b->add32(erre.getRRect().getType() | erre.getEdgeType() << 3);
573 } 574 }
574 575
575 void GLEllipticalRRectEffect::onSetData(const GrGLProgramDataManager& pdman, 576 void GLEllipticalRRectEffect::onSetData(const GrGLSLProgramDataManager& pdman,
576 const GrProcessor& effect) { 577 const GrProcessor& effect) {
577 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>(); 578 const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>();
578 const SkRRect& rrect = erre.getRRect(); 579 const SkRRect& rrect = erre.getRRect();
579 if (rrect != fPrevRRect) { 580 if (rrect != fPrevRRect) {
580 SkRect rect = rrect.getBounds(); 581 SkRect rect = rrect.getBounds();
581 const SkVector& r0 = rrect.radii(SkRRect::kUpperLeft_Corner); 582 const SkVector& r0 = rrect.radii(SkRRect::kUpperLeft_Corner);
582 SkASSERT(r0.fX >= kRadiusMin); 583 SkASSERT(r0.fX >= kRadiusMin);
583 SkASSERT(r0.fY >= kRadiusMin); 584 SkASSERT(r0.fY >= kRadiusMin);
584 switch (erre.getRRect().getType()) { 585 switch (erre.getRRect().getType()) {
585 case SkRRect::kSimple_Type: 586 case SkRRect::kSimple_Type:
586 rect.inset(r0.fX, r0.fY); 587 rect.inset(r0.fX, r0.fY);
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 if (rrect.isNinePatch()) { 712 if (rrect.isNinePatch()) {
712 return EllipticalRRectEffect::Create(edgeType, rrect); 713 return EllipticalRRectEffect::Create(edgeType, rrect);
713 } 714 }
714 return nullptr; 715 return nullptr;
715 } 716 }
716 } 717 }
717 } 718 }
718 719
719 return nullptr; 720 return nullptr;
720 } 721 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrPorterDuffXferProcessor.cpp ('k') | src/gpu/effects/GrTextureDomain.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698