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

Side by Side Diff: src/gpu/effects/GrOvalEffect.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
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 "GrOvalEffect.h" 8 #include "GrOvalEffect.h"
9 9
10 #include "GrFragmentProcessor.h" 10 #include "GrFragmentProcessor.h"
11 #include "GrInvariantOutput.h" 11 #include "GrInvariantOutput.h"
12 #include "SkRect.h" 12 #include "SkRect.h"
13 #include "gl/GrGLFragmentProcessor.h" 13 #include "glsl/GrGLSLFragmentProcessor.h"
14 #include "glsl/GrGLSLFragmentShaderBuilder.h" 14 #include "glsl/GrGLSLFragmentShaderBuilder.h"
15 #include "glsl/GrGLSLProgramBuilder.h" 15 #include "glsl/GrGLSLProgramBuilder.h"
16 #include "glsl/GrGLSLProgramDataManager.h" 16 #include "glsl/GrGLSLProgramDataManager.h"
17 17
18 ////////////////////////////////////////////////////////////////////////////// 18 //////////////////////////////////////////////////////////////////////////////
19 19
20 class CircleEffect : public GrFragmentProcessor { 20 class CircleEffect : public GrFragmentProcessor {
21 public: 21 public:
22 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkPoint& cente r, SkScalar radius); 22 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkPoint& cente r, SkScalar radius);
23 23
24 virtual ~CircleEffect() {}; 24 virtual ~CircleEffect() {};
25 25
26 const char* name() const override { return "Circle"; } 26 const char* name() const override { return "Circle"; }
27 27
28 const SkPoint& getCenter() const { return fCenter; } 28 const SkPoint& getCenter() const { return fCenter; }
29 SkScalar getRadius() const { return fRadius; } 29 SkScalar getRadius() const { return fRadius; }
30 30
31 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 31 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
32 32
33 private: 33 private:
34 CircleEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar radius); 34 CircleEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar radius);
35 35
36 GrGLFragmentProcessor* onCreateGLInstance() const override; 36 GrGLSLFragmentProcessor* onCreateGLInstance() const override;
37 37
38 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 38 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
39 39
40 bool onIsEqual(const GrFragmentProcessor&) const override; 40 bool onIsEqual(const GrFragmentProcessor&) const override;
41 41
42 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 42 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
43 43
44 SkPoint fCenter; 44 SkPoint fCenter;
45 SkScalar fRadius; 45 SkScalar fRadius;
46 GrPrimitiveEdgeType fEdgeType; 46 GrPrimitiveEdgeType fEdgeType;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 SkScalar radius = d->fRandom->nextRangeF(0.f, 1000.f); 84 SkScalar radius = d->fRandom->nextRangeF(0.f, 1000.f);
85 GrPrimitiveEdgeType et; 85 GrPrimitiveEdgeType et;
86 do { 86 do {
87 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt); 87 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt);
88 } while (kHairlineAA_GrProcessorEdgeType == et); 88 } while (kHairlineAA_GrProcessorEdgeType == et);
89 return CircleEffect::Create(et, center, radius); 89 return CircleEffect::Create(et, center, radius);
90 } 90 }
91 91
92 ////////////////////////////////////////////////////////////////////////////// 92 //////////////////////////////////////////////////////////////////////////////
93 93
94 class GLCircleEffect : public GrGLFragmentProcessor { 94 class GLCircleEffect : public GrGLSLFragmentProcessor {
95 public: 95 public:
96 GLCircleEffect(const GrProcessor&); 96 GLCircleEffect(const GrProcessor&);
97 97
98 virtual void emitCode(EmitArgs&) override; 98 virtual void emitCode(EmitArgs&) override;
99 99
100 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 100 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
101 101
102 protected: 102 protected:
103 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 103 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
104 104
105 private: 105 private:
106 GrGLSLProgramDataManager::UniformHandle fCircleUniform; 106 GrGLSLProgramDataManager::UniformHandle fCircleUniform;
107 SkPoint fPrevCenter; 107 SkPoint fPrevCenter;
108 SkScalar fPrevRadius; 108 SkScalar fPrevRadius;
109 109
110 typedef GrGLFragmentProcessor INHERITED; 110 typedef GrGLSLFragmentProcessor INHERITED;
111 }; 111 };
112 112
113 GLCircleEffect::GLCircleEffect(const GrProcessor&) { 113 GLCircleEffect::GLCircleEffect(const GrProcessor&) {
114 fPrevRadius = -1.f; 114 fPrevRadius = -1.f;
115 } 115 }
116 116
117 void GLCircleEffect::emitCode(EmitArgs& args) { 117 void GLCircleEffect::emitCode(EmitArgs& args) {
118 const CircleEffect& ce = args.fFp.cast<CircleEffect>(); 118 const CircleEffect& ce = args.fFp.cast<CircleEffect>();
119 const char *circleName; 119 const char *circleName;
120 // The circle uniform is (center.x, center.y, radius + 0.5, 1 / (radius + 0. 5)) for regular 120 // The circle uniform is (center.x, center.y, radius + 0.5, 1 / (radius + 0. 5)) for regular
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 } 172 }
173 } 173 }
174 174
175 //////////////////////////////////////////////////////////////////////////////// /////////////////// 175 //////////////////////////////////////////////////////////////////////////////// ///////////////////
176 176
177 void CircleEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 177 void CircleEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
178 GrProcessorKeyBuilder* b) const { 178 GrProcessorKeyBuilder* b) const {
179 GLCircleEffect::GenKey(*this, caps, b); 179 GLCircleEffect::GenKey(*this, caps, b);
180 } 180 }
181 181
182 GrGLFragmentProcessor* CircleEffect::onCreateGLInstance() const { 182 GrGLSLFragmentProcessor* CircleEffect::onCreateGLInstance() const {
183 return new GLCircleEffect(*this); 183 return new GLCircleEffect(*this);
184 } 184 }
185 185
186 ////////////////////////////////////////////////////////////////////////////// 186 //////////////////////////////////////////////////////////////////////////////
187 187
188 class EllipseEffect : public GrFragmentProcessor { 188 class EllipseEffect : public GrFragmentProcessor {
189 public: 189 public:
190 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkPoint& cente r, SkScalar rx, 190 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkPoint& cente r, SkScalar rx,
191 SkScalar ry); 191 SkScalar ry);
192 192
193 virtual ~EllipseEffect() {}; 193 virtual ~EllipseEffect() {};
194 194
195 const char* name() const override { return "Ellipse"; } 195 const char* name() const override { return "Ellipse"; }
196 196
197 const SkPoint& getCenter() const { return fCenter; } 197 const SkPoint& getCenter() const { return fCenter; }
198 SkVector getRadii() const { return fRadii; } 198 SkVector getRadii() const { return fRadii; }
199 199
200 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 200 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
201 201
202 private: 202 private:
203 EllipseEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar rx, SkSca lar ry); 203 EllipseEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar rx, SkSca lar ry);
204 204
205 GrGLFragmentProcessor* onCreateGLInstance() const override; 205 GrGLSLFragmentProcessor* onCreateGLInstance() const override;
206 206
207 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 207 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
208 208
209 bool onIsEqual(const GrFragmentProcessor&) const override; 209 bool onIsEqual(const GrFragmentProcessor&) const override;
210 210
211 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 211 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
212 212
213 SkPoint fCenter; 213 SkPoint fCenter;
214 SkVector fRadii; 214 SkVector fRadii;
215 GrPrimitiveEdgeType fEdgeType; 215 GrPrimitiveEdgeType fEdgeType;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 SkScalar ry = d->fRandom->nextRangeF(0.f, 1000.f); 256 SkScalar ry = d->fRandom->nextRangeF(0.f, 1000.f);
257 GrPrimitiveEdgeType et; 257 GrPrimitiveEdgeType et;
258 do { 258 do {
259 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt); 259 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt);
260 } while (kHairlineAA_GrProcessorEdgeType == et); 260 } while (kHairlineAA_GrProcessorEdgeType == et);
261 return EllipseEffect::Create(et, center, rx, ry); 261 return EllipseEffect::Create(et, center, rx, ry);
262 } 262 }
263 263
264 ////////////////////////////////////////////////////////////////////////////// 264 //////////////////////////////////////////////////////////////////////////////
265 265
266 class GLEllipseEffect : public GrGLFragmentProcessor { 266 class GLEllipseEffect : public GrGLSLFragmentProcessor {
267 public: 267 public:
268 GLEllipseEffect(const GrProcessor&); 268 GLEllipseEffect(const GrProcessor&);
269 269
270 virtual void emitCode(EmitArgs&) override; 270 virtual void emitCode(EmitArgs&) override;
271 271
272 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*); 272 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder*);
273 273
274 protected: 274 protected:
275 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 275 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
276 276
277 private: 277 private:
278 GrGLSLProgramDataManager::UniformHandle fEllipseUniform; 278 GrGLSLProgramDataManager::UniformHandle fEllipseUniform;
279 SkPoint fPrevCenter; 279 SkPoint fPrevCenter;
280 SkVector fPrevRadii; 280 SkVector fPrevRadii;
281 281
282 typedef GrGLFragmentProcessor INHERITED; 282 typedef GrGLSLFragmentProcessor INHERITED;
283 }; 283 };
284 284
285 GLEllipseEffect::GLEllipseEffect(const GrProcessor& effect) { 285 GLEllipseEffect::GLEllipseEffect(const GrProcessor& effect) {
286 fPrevRadii.fX = -1.f; 286 fPrevRadii.fX = -1.f;
287 } 287 }
288 288
289 void GLEllipseEffect::emitCode(EmitArgs& args) { 289 void GLEllipseEffect::emitCode(EmitArgs& args) {
290 const EllipseEffect& ee = args.fFp.cast<EllipseEffect>(); 290 const EllipseEffect& ee = args.fFp.cast<EllipseEffect>();
291 const char *ellipseName; 291 const char *ellipseName;
292 // The ellipse uniform is (center.x, center.y, 1 / rx^2, 1 / ry^2) 292 // The ellipse uniform is (center.x, center.y, 1 / rx^2, 1 / ry^2)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 } 349 }
350 } 350 }
351 351
352 //////////////////////////////////////////////////////////////////////////////// /////////////////// 352 //////////////////////////////////////////////////////////////////////////////// ///////////////////
353 353
354 void EllipseEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, 354 void EllipseEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
355 GrProcessorKeyBuilder* b) const { 355 GrProcessorKeyBuilder* b) const {
356 GLEllipseEffect::GenKey(*this, caps, b); 356 GLEllipseEffect::GenKey(*this, caps, b);
357 } 357 }
358 358
359 GrGLFragmentProcessor* EllipseEffect::onCreateGLInstance() const { 359 GrGLSLFragmentProcessor* EllipseEffect::onCreateGLInstance() const {
360 return new GLEllipseEffect(*this); 360 return new GLEllipseEffect(*this);
361 } 361 }
362 362
363 ////////////////////////////////////////////////////////////////////////////// 363 //////////////////////////////////////////////////////////////////////////////
364 364
365 GrFragmentProcessor* GrOvalEffect::Create(GrPrimitiveEdgeType edgeType, const Sk Rect& oval) { 365 GrFragmentProcessor* GrOvalEffect::Create(GrPrimitiveEdgeType edgeType, const Sk Rect& oval) {
366 if (kHairlineAA_GrProcessorEdgeType == edgeType) { 366 if (kHairlineAA_GrProcessorEdgeType == edgeType) {
367 return nullptr; 367 return nullptr;
368 } 368 }
369 SkScalar w = oval.width(); 369 SkScalar w = oval.width();
370 SkScalar h = oval.height(); 370 SkScalar h = oval.height();
371 if (SkScalarNearlyEqual(w, h)) { 371 if (SkScalarNearlyEqual(w, h)) {
372 w /= 2; 372 w /= 2;
373 return CircleEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, oval .fTop + w), w); 373 return CircleEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, oval .fTop + w), w);
374 } else { 374 } else {
375 w /= 2; 375 w /= 2;
376 h /= 2; 376 h /= 2;
377 return EllipseEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, ova l.fTop + h), w, h); 377 return EllipseEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, ova l.fTop + h), w, h);
378 } 378 }
379 379
380 return nullptr; 380 return nullptr;
381 } 381 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrMatrixConvolutionEffect.cpp ('k') | src/gpu/effects/GrPorterDuffXferProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698