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

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

Issue 2041113004: sk_sp for gpu. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Reserve correctly. Created 4 years, 6 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.h ('k') | src/gpu/effects/GrPorterDuffXferProcessor.cpp » ('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 "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 "glsl/GrGLSLFragmentProcessor.h" 13 #include "glsl/GrGLSLFragmentProcessor.h"
14 #include "glsl/GrGLSLFragmentShaderBuilder.h" 14 #include "glsl/GrGLSLFragmentShaderBuilder.h"
15 #include "glsl/GrGLSLProgramDataManager.h" 15 #include "glsl/GrGLSLProgramDataManager.h"
16 #include "glsl/GrGLSLUniformHandler.h" 16 #include "glsl/GrGLSLUniformHandler.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 sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPoint& c enter,
23 SkScalar radius);
23 24
24 virtual ~CircleEffect() {}; 25 virtual ~CircleEffect() {};
25 26
26 const char* name() const override { return "Circle"; } 27 const char* name() const override { return "Circle"; }
27 28
28 const SkPoint& getCenter() const { return fCenter; } 29 const SkPoint& getCenter() const { return fCenter; }
29 SkScalar getRadius() const { return fRadius; } 30 SkScalar getRadius() const { return fRadius; }
30 31
31 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 32 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
32 33
(...skipping 10 matching lines...) Expand all
43 44
44 SkPoint fCenter; 45 SkPoint fCenter;
45 SkScalar fRadius; 46 SkScalar fRadius;
46 GrPrimitiveEdgeType fEdgeType; 47 GrPrimitiveEdgeType fEdgeType;
47 48
48 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 49 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
49 50
50 typedef GrFragmentProcessor INHERITED; 51 typedef GrFragmentProcessor INHERITED;
51 }; 52 };
52 53
53 GrFragmentProcessor* CircleEffect::Create(GrPrimitiveEdgeType edgeType, const Sk Point& center, 54 sk_sp<GrFragmentProcessor> CircleEffect::Make(GrPrimitiveEdgeType edgeType, cons t SkPoint& center,
54 SkScalar radius) { 55 SkScalar radius) {
55 SkASSERT(radius >= 0); 56 SkASSERT(radius >= 0);
56 return new CircleEffect(edgeType, center, radius); 57 return sk_sp<GrFragmentProcessor>(new CircleEffect(edgeType, center, radius) );
57 } 58 }
58 59
59 void CircleEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const { 60 void CircleEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const {
60 inout->mulByUnknownSingleComponent(); 61 inout->mulByUnknownSingleComponent();
61 } 62 }
62 63
63 CircleEffect::CircleEffect(GrPrimitiveEdgeType edgeType, const SkPoint& c, SkSca lar r) 64 CircleEffect::CircleEffect(GrPrimitiveEdgeType edgeType, const SkPoint& c, SkSca lar r)
64 : fCenter(c) 65 : fCenter(c)
65 , fRadius(r) 66 , fRadius(r)
66 , fEdgeType(edgeType) { 67 , fEdgeType(edgeType) {
67 this->initClassID<CircleEffect>(); 68 this->initClassID<CircleEffect>();
68 this->setWillReadFragmentPosition(); 69 this->setWillReadFragmentPosition();
69 } 70 }
70 71
71 bool CircleEffect::onIsEqual(const GrFragmentProcessor& other) const { 72 bool CircleEffect::onIsEqual(const GrFragmentProcessor& other) const {
72 const CircleEffect& ce = other.cast<CircleEffect>(); 73 const CircleEffect& ce = other.cast<CircleEffect>();
73 return fEdgeType == ce.fEdgeType && fCenter == ce.fCenter && fRadius == ce.f Radius; 74 return fEdgeType == ce.fEdgeType && fCenter == ce.fCenter && fRadius == ce.f Radius;
74 } 75 }
75 76
76 ////////////////////////////////////////////////////////////////////////////// 77 //////////////////////////////////////////////////////////////////////////////
77 78
78 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleEffect); 79 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleEffect);
79 80
80 const GrFragmentProcessor* CircleEffect::TestCreate(GrProcessorTestData* d) { 81 sk_sp<GrFragmentProcessor> CircleEffect::TestCreate(GrProcessorTestData* d) {
81 SkPoint center; 82 SkPoint center;
82 center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f); 83 center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f);
83 center.fY = d->fRandom->nextRangeScalar(0.f, 1000.f); 84 center.fY = d->fRandom->nextRangeScalar(0.f, 1000.f);
84 SkScalar radius = d->fRandom->nextRangeF(0.f, 1000.f); 85 SkScalar radius = d->fRandom->nextRangeF(0.f, 1000.f);
85 GrPrimitiveEdgeType et; 86 GrPrimitiveEdgeType et;
86 do { 87 do {
87 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt); 88 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt);
88 } while (kHairlineAA_GrProcessorEdgeType == et); 89 } while (kHairlineAA_GrProcessorEdgeType == et);
89 return CircleEffect::Create(et, center, radius); 90 return CircleEffect::Make(et, center, radius);
90 } 91 }
91 92
92 ////////////////////////////////////////////////////////////////////////////// 93 //////////////////////////////////////////////////////////////////////////////
93 94
94 class GLCircleEffect : public GrGLSLFragmentProcessor { 95 class GLCircleEffect : public GrGLSLFragmentProcessor {
95 public: 96 public:
96 GLCircleEffect() : fPrevRadius(-1.0f) { } 97 GLCircleEffect() : fPrevRadius(-1.0f) { }
97 98
98 virtual void emitCode(EmitArgs&) override; 99 virtual void emitCode(EmitArgs&) override;
99 100
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 } 177 }
177 178
178 GrGLSLFragmentProcessor* CircleEffect::onCreateGLSLInstance() const { 179 GrGLSLFragmentProcessor* CircleEffect::onCreateGLSLInstance() const {
179 return new GLCircleEffect; 180 return new GLCircleEffect;
180 } 181 }
181 182
182 ////////////////////////////////////////////////////////////////////////////// 183 //////////////////////////////////////////////////////////////////////////////
183 184
184 class EllipseEffect : public GrFragmentProcessor { 185 class EllipseEffect : public GrFragmentProcessor {
185 public: 186 public:
186 static GrFragmentProcessor* Create(GrPrimitiveEdgeType, const SkPoint& cente r, SkScalar rx, 187 static sk_sp<GrFragmentProcessor> Make(GrPrimitiveEdgeType, const SkPoint& c enter,
187 SkScalar ry); 188 SkScalar rx, SkScalar ry);
188 189
189 virtual ~EllipseEffect() {}; 190 virtual ~EllipseEffect() {};
190 191
191 const char* name() const override { return "Ellipse"; } 192 const char* name() const override { return "Ellipse"; }
192 193
193 const SkPoint& getCenter() const { return fCenter; } 194 const SkPoint& getCenter() const { return fCenter; }
194 SkVector getRadii() const { return fRadii; } 195 SkVector getRadii() const { return fRadii; }
195 196
196 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 197 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
197 198
(...skipping 10 matching lines...) Expand all
208 209
209 SkPoint fCenter; 210 SkPoint fCenter;
210 SkVector fRadii; 211 SkVector fRadii;
211 GrPrimitiveEdgeType fEdgeType; 212 GrPrimitiveEdgeType fEdgeType;
212 213
213 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 214 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
214 215
215 typedef GrFragmentProcessor INHERITED; 216 typedef GrFragmentProcessor INHERITED;
216 }; 217 };
217 218
218 GrFragmentProcessor* EllipseEffect::Create(GrPrimitiveEdgeType edgeType, 219 sk_sp<GrFragmentProcessor> EllipseEffect::Make(GrPrimitiveEdgeType edgeType,
219 const SkPoint& center, 220 const SkPoint& center,
220 SkScalar rx, 221 SkScalar rx,
221 SkScalar ry) { 222 SkScalar ry) {
222 SkASSERT(rx >= 0 && ry >= 0); 223 SkASSERT(rx >= 0 && ry >= 0);
223 return new EllipseEffect(edgeType, center, rx, ry); 224 return sk_sp<GrFragmentProcessor>(new EllipseEffect(edgeType, center, rx, ry ));
224 } 225 }
225 226
226 void EllipseEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const { 227 void EllipseEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const {
227 inout->mulByUnknownSingleComponent(); 228 inout->mulByUnknownSingleComponent();
228 } 229 }
229 230
230 EllipseEffect::EllipseEffect(GrPrimitiveEdgeType edgeType, const SkPoint& c, SkS calar rx, SkScalar ry) 231 EllipseEffect::EllipseEffect(GrPrimitiveEdgeType edgeType, const SkPoint& c, SkS calar rx, SkScalar ry)
231 : fCenter(c) 232 : fCenter(c)
232 , fRadii(SkVector::Make(rx, ry)) 233 , fRadii(SkVector::Make(rx, ry))
233 , fEdgeType(edgeType) { 234 , fEdgeType(edgeType) {
234 this->initClassID<EllipseEffect>(); 235 this->initClassID<EllipseEffect>();
235 this->setWillReadFragmentPosition(); 236 this->setWillReadFragmentPosition();
236 } 237 }
237 238
238 bool EllipseEffect::onIsEqual(const GrFragmentProcessor& other) const { 239 bool EllipseEffect::onIsEqual(const GrFragmentProcessor& other) const {
239 const EllipseEffect& ee = other.cast<EllipseEffect>(); 240 const EllipseEffect& ee = other.cast<EllipseEffect>();
240 return fEdgeType == ee.fEdgeType && fCenter == ee.fCenter && fRadii == ee.fR adii; 241 return fEdgeType == ee.fEdgeType && fCenter == ee.fCenter && fRadii == ee.fR adii;
241 } 242 }
242 243
243 ////////////////////////////////////////////////////////////////////////////// 244 //////////////////////////////////////////////////////////////////////////////
244 245
245 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(EllipseEffect); 246 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(EllipseEffect);
246 247
247 const GrFragmentProcessor* EllipseEffect::TestCreate(GrProcessorTestData* d) { 248 sk_sp<GrFragmentProcessor> EllipseEffect::TestCreate(GrProcessorTestData* d) {
248 SkPoint center; 249 SkPoint center;
249 center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f); 250 center.fX = d->fRandom->nextRangeScalar(0.f, 1000.f);
250 center.fY = d->fRandom->nextRangeScalar(0.f, 1000.f); 251 center.fY = d->fRandom->nextRangeScalar(0.f, 1000.f);
251 SkScalar rx = d->fRandom->nextRangeF(0.f, 1000.f); 252 SkScalar rx = d->fRandom->nextRangeF(0.f, 1000.f);
252 SkScalar ry = d->fRandom->nextRangeF(0.f, 1000.f); 253 SkScalar ry = d->fRandom->nextRangeF(0.f, 1000.f);
253 GrPrimitiveEdgeType et; 254 GrPrimitiveEdgeType et;
254 do { 255 do {
255 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt); 256 et = (GrPrimitiveEdgeType)d->fRandom->nextULessThan(kGrProcessorEdgeType Cnt);
256 } while (kHairlineAA_GrProcessorEdgeType == et); 257 } while (kHairlineAA_GrProcessorEdgeType == et);
257 return EllipseEffect::Create(et, center, rx, ry); 258 return EllipseEffect::Make(et, center, rx, ry);
258 } 259 }
259 260
260 ////////////////////////////////////////////////////////////////////////////// 261 //////////////////////////////////////////////////////////////////////////////
261 262
262 class GLEllipseEffect : public GrGLSLFragmentProcessor { 263 class GLEllipseEffect : public GrGLSLFragmentProcessor {
263 public: 264 public:
264 GLEllipseEffect() { 265 GLEllipseEffect() {
265 fPrevRadii.fX = -1.0f; 266 fPrevRadii.fX = -1.0f;
266 } 267 }
267 268
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 GrProcessorKeyBuilder* b) const { 385 GrProcessorKeyBuilder* b) const {
385 GLEllipseEffect::GenKey(*this, caps, b); 386 GLEllipseEffect::GenKey(*this, caps, b);
386 } 387 }
387 388
388 GrGLSLFragmentProcessor* EllipseEffect::onCreateGLSLInstance() const { 389 GrGLSLFragmentProcessor* EllipseEffect::onCreateGLSLInstance() const {
389 return new GLEllipseEffect; 390 return new GLEllipseEffect;
390 } 391 }
391 392
392 ////////////////////////////////////////////////////////////////////////////// 393 //////////////////////////////////////////////////////////////////////////////
393 394
394 GrFragmentProcessor* GrOvalEffect::Create(GrPrimitiveEdgeType edgeType, const Sk Rect& oval) { 395 sk_sp<GrFragmentProcessor> GrOvalEffect::Make(GrPrimitiveEdgeType edgeType, cons t SkRect& oval) {
395 if (kHairlineAA_GrProcessorEdgeType == edgeType) { 396 if (kHairlineAA_GrProcessorEdgeType == edgeType) {
396 return nullptr; 397 return nullptr;
397 } 398 }
398 SkScalar w = oval.width(); 399 SkScalar w = oval.width();
399 SkScalar h = oval.height(); 400 SkScalar h = oval.height();
400 if (SkScalarNearlyEqual(w, h)) { 401 if (SkScalarNearlyEqual(w, h)) {
401 w /= 2; 402 w /= 2;
402 return CircleEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, oval .fTop + w), w); 403 return CircleEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.f Top + w), w);
403 } else { 404 } else {
404 w /= 2; 405 w /= 2;
405 h /= 2; 406 h /= 2;
406 return EllipseEffect::Create(edgeType, SkPoint::Make(oval.fLeft + w, ova l.fTop + h), w, h); 407 return EllipseEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval. fTop + h), w, h);
407 } 408 }
408 409
409 return nullptr; 410 return nullptr;
410 } 411 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrOvalEffect.h ('k') | src/gpu/effects/GrPorterDuffXferProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698