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

Side by Side Diff: src/gpu/GrOvalRenderer.cpp

Issue 820783005: More changes to bring together path / geo procs (Closed) Base URL: https://skia.googlesource.com/skia.git@lc1
Patch Set: feedback incorporated Created 5 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrProcessor.h" 10 #include "GrProcessor.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 * outerRad is the outerRadius in device space. 62 * outerRad is the outerRadius in device space.
63 * innerRad is the innerRadius in normalized space (ignored if not s troking). 63 * innerRad is the innerRadius in normalized space (ignored if not s troking).
64 */ 64 */
65 65
66 class CircleEdgeEffect : public GrGeometryProcessor { 66 class CircleEdgeEffect : public GrGeometryProcessor {
67 public: 67 public:
68 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) { 68 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) {
69 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix)); 69 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix));
70 } 70 }
71 71
72 const GrAttribute* inPosition() const { return fInPosition; } 72 const Attribute* inPosition() const { return fInPosition; }
73 const GrAttribute* inCircleEdge() const { return fInCircleEdge; } 73 const Attribute* inCircleEdge() const { return fInCircleEdge; }
74 virtual ~CircleEdgeEffect() {} 74 virtual ~CircleEdgeEffect() {}
75 75
76 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; } 76 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; }
77 77
78 inline bool isStroked() const { return fStroke; } 78 inline bool isStroked() const { return fStroke; }
79 79
80 class GLProcessor : public GrGLGeometryProcessor { 80 class GLProcessor : public GrGLGeometryProcessor {
81 public: 81 public:
82 GLProcessor(const GrGeometryProcessor&, 82 GLProcessor(const GrGeometryProcessor&,
83 const GrBatchTracker&) 83 const GrBatchTracker&)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 183 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
184 that, theirs.fUsesLocalCoords) && 184 that, theirs.fUsesLocalCoords) &&
185 CanCombineOutput(mine.fInputColorType, mine.fColor, 185 CanCombineOutput(mine.fInputColorType, mine.fColor,
186 theirs.fInputColorType, theirs.fColor); 186 theirs.fInputColorType, theirs.fColor);
187 } 187 }
188 188
189 private: 189 private:
190 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) 190 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix)
191 : INHERITED(color, SkMatrix::I(), localMatrix) { 191 : INHERITED(color, SkMatrix::I(), localMatrix) {
192 this->initClassID<CircleEdgeEffect>(); 192 this->initClassID<CircleEdgeEffect>();
193 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 193 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
194 fInCircleEdge = &this->addVertexAttrib(GrAttribute("inCircleEdge", 194 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge",
195 kVec4f_GrVertexAttrib Type)); 195 kVec4f_GrVertexAttrib Type));
196 fStroke = stroke; 196 fStroke = stroke;
197 } 197 }
198 198
199 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 199 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
200 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>(); 200 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>();
201 return cee.fStroke == fStroke; 201 return cee.fStroke == fStroke;
202 } 202 }
203 203
204 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 204 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
205 out->setUnknownSingleComponent(); 205 out->setUnknownSingleComponent();
206 } 206 }
207 207
208 struct BatchTracker { 208 struct BatchTracker {
209 GrGPInput fInputColorType; 209 GrGPInput fInputColorType;
210 GrColor fColor; 210 GrColor fColor;
211 bool fUsesLocalCoords; 211 bool fUsesLocalCoords;
212 }; 212 };
213 213
214 const GrAttribute* fInPosition; 214 const Attribute* fInPosition;
215 const GrAttribute* fInCircleEdge; 215 const Attribute* fInCircleEdge;
216 bool fStroke; 216 bool fStroke;
217 217
218 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 218 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
219 219
220 typedef GrGeometryProcessor INHERITED; 220 typedef GrGeometryProcessor INHERITED;
221 }; 221 };
222 222
223 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleEdgeEffect); 223 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(CircleEdgeEffect);
224 224
225 GrGeometryProcessor* CircleEdgeEffect::TestCreate(SkRandom* random, 225 GrGeometryProcessor* CircleEdgeEffect::TestCreate(SkRandom* random,
(...skipping 18 matching lines...) Expand all
244 class EllipseEdgeEffect : public GrGeometryProcessor { 244 class EllipseEdgeEffect : public GrGeometryProcessor {
245 public: 245 public:
246 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) { 246 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) {
247 return SkNEW_ARGS(EllipseEdgeEffect, (color, stroke, localMatrix)); 247 return SkNEW_ARGS(EllipseEdgeEffect, (color, stroke, localMatrix));
248 } 248 }
249 249
250 virtual ~EllipseEdgeEffect() {} 250 virtual ~EllipseEdgeEffect() {}
251 251
252 virtual const char* name() const SK_OVERRIDE { return "EllipseEdge"; } 252 virtual const char* name() const SK_OVERRIDE { return "EllipseEdge"; }
253 253
254 const GrAttribute* inPosition() const { return fInPosition; } 254 const Attribute* inPosition() const { return fInPosition; }
255 const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; } 255 const Attribute* inEllipseOffset() const { return fInEllipseOffset; }
256 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; } 256 const Attribute* inEllipseRadii() const { return fInEllipseRadii; }
257 257
258 inline bool isStroked() const { return fStroke; } 258 inline bool isStroked() const { return fStroke; }
259 259
260 class GLProcessor : public GrGLGeometryProcessor { 260 class GLProcessor : public GrGLGeometryProcessor {
261 public: 261 public:
262 GLProcessor(const GrGeometryProcessor&, 262 GLProcessor(const GrGeometryProcessor&,
263 const GrBatchTracker&) 263 const GrBatchTracker&)
264 : fColor(GrColor_ILLEGAL) {} 264 : fColor(GrColor_ILLEGAL) {}
265 265
266 virtual void emitCode(EmitArgs& args) SK_OVERRIDE { 266 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 385 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
386 that, theirs.fUsesLocalCoords) && 386 that, theirs.fUsesLocalCoords) &&
387 CanCombineOutput(mine.fInputColorType, mine.fColor, 387 CanCombineOutput(mine.fInputColorType, mine.fColor,
388 theirs.fInputColorType, theirs.fColor); 388 theirs.fInputColorType, theirs.fColor);
389 } 389 }
390 390
391 private: 391 private:
392 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) 392 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix)
393 : INHERITED(color, SkMatrix::I(), localMatrix) { 393 : INHERITED(color, SkMatrix::I(), localMatrix) {
394 this->initClassID<EllipseEdgeEffect>(); 394 this->initClassID<EllipseEdgeEffect>();
395 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 395 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
396 fInEllipseOffset = &this->addVertexAttrib(GrAttribute("inEllipseOffset", 396 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset",
397 kVec2f_GrVertexAtt ribType)); 397 kVec2f_GrVertexAtt ribType));
398 fInEllipseRadii = &this->addVertexAttrib(GrAttribute("inEllipseRadii", 398 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii",
399 kVec4f_GrVertexAttr ibType)); 399 kVec4f_GrVertexAttr ibType));
400 fStroke = stroke; 400 fStroke = stroke;
401 } 401 }
402 402
403 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 403 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
404 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>(); 404 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>();
405 return eee.fStroke == fStroke; 405 return eee.fStroke == fStroke;
406 } 406 }
407 407
408 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 408 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
409 out->setUnknownSingleComponent(); 409 out->setUnknownSingleComponent();
410 } 410 }
411 411
412 struct BatchTracker { 412 struct BatchTracker {
413 GrGPInput fInputColorType; 413 GrGPInput fInputColorType;
414 GrColor fColor; 414 GrColor fColor;
415 bool fUsesLocalCoords; 415 bool fUsesLocalCoords;
416 }; 416 };
417 417
418 const GrAttribute* fInPosition; 418 const Attribute* fInPosition;
419 const GrAttribute* fInEllipseOffset; 419 const Attribute* fInEllipseOffset;
420 const GrAttribute* fInEllipseRadii; 420 const Attribute* fInEllipseRadii;
421 bool fStroke; 421 bool fStroke;
422 422
423 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 423 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
424 424
425 typedef GrGeometryProcessor INHERITED; 425 typedef GrGeometryProcessor INHERITED;
426 }; 426 };
427 427
428 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseEdgeEffect); 428 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(EllipseEdgeEffect);
429 429
430 GrGeometryProcessor* EllipseEdgeEffect::TestCreate(SkRandom* random, 430 GrGeometryProcessor* EllipseEdgeEffect::TestCreate(SkRandom* random,
(...skipping 21 matching lines...) Expand all
452 enum Mode { kStroke = 0, kHairline, kFill }; 452 enum Mode { kStroke = 0, kHairline, kFill };
453 453
454 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , Mode mode) { 454 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , Mode mode) {
455 return SkNEW_ARGS(DIEllipseEdgeEffect, (color, viewMatrix, mode)); 455 return SkNEW_ARGS(DIEllipseEdgeEffect, (color, viewMatrix, mode));
456 } 456 }
457 457
458 virtual ~DIEllipseEdgeEffect() {} 458 virtual ~DIEllipseEdgeEffect() {}
459 459
460 virtual const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; } 460 virtual const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; }
461 461
462 const GrAttribute* inPosition() const { return fInPosition; } 462 const Attribute* inPosition() const { return fInPosition; }
463 const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; } 463 const Attribute* inEllipseOffsets0() const { return fInEllipseOffsets0; }
464 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } 464 const Attribute* inEllipseOffsets1() const { return fInEllipseOffsets1; }
465 465
466 inline Mode getMode() const { return fMode; } 466 inline Mode getMode() const { return fMode; }
467 467
468 class GLProcessor : public GrGLGeometryProcessor { 468 class GLProcessor : public GrGLGeometryProcessor {
469 public: 469 public:
470 GLProcessor(const GrGeometryProcessor&, 470 GLProcessor(const GrGeometryProcessor&,
471 const GrBatchTracker&) 471 const GrBatchTracker&)
472 : fColor(GrColor_ILLEGAL) {} 472 : fColor(GrColor_ILLEGAL) {}
473 473
474 virtual void emitCode(EmitArgs& args) SK_OVERRIDE { 474 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 608 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
609 that, theirs.fUsesLocalCoords) && 609 that, theirs.fUsesLocalCoords) &&
610 CanCombineOutput(mine.fInputColorType, mine.fColor, 610 CanCombineOutput(mine.fInputColorType, mine.fColor,
611 theirs.fInputColorType, theirs.fColor); 611 theirs.fInputColorType, theirs.fColor);
612 } 612 }
613 613
614 private: 614 private:
615 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode) 615 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode)
616 : INHERITED(color, viewMatrix) { 616 : INHERITED(color, viewMatrix) {
617 this->initClassID<DIEllipseEdgeEffect>(); 617 this->initClassID<DIEllipseEdgeEffect>();
618 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 618 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
619 fInEllipseOffsets0 = &this->addVertexAttrib(GrAttribute("inEllipseOffset s0", 619 fInEllipseOffsets0 = &this->addVertexAttrib(Attribute("inEllipseOffsets0 ",
620 kVec2f_GrVertexA ttribType)); 620 kVec2f_GrVertexA ttribType));
621 fInEllipseOffsets1 = &this->addVertexAttrib(GrAttribute("inEllipseOffset s1", 621 fInEllipseOffsets1 = &this->addVertexAttrib(Attribute("inEllipseOffsets1 ",
622 kVec2f_GrVertexA ttribType)); 622 kVec2f_GrVertexA ttribType));
623 fMode = mode; 623 fMode = mode;
624 } 624 }
625 625
626 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 626 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
627 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>(); 627 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>();
628 return eee.fMode == fMode; 628 return eee.fMode == fMode;
629 } 629 }
630 630
631 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 631 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
632 out->setUnknownSingleComponent(); 632 out->setUnknownSingleComponent();
633 } 633 }
634 634
635 struct BatchTracker { 635 struct BatchTracker {
636 GrGPInput fInputColorType; 636 GrGPInput fInputColorType;
637 GrColor fColor; 637 GrColor fColor;
638 bool fUsesLocalCoords; 638 bool fUsesLocalCoords;
639 }; 639 };
640 640
641 const GrAttribute* fInPosition; 641 const Attribute* fInPosition;
642 const GrAttribute* fInEllipseOffsets0; 642 const Attribute* fInEllipseOffsets0;
643 const GrAttribute* fInEllipseOffsets1; 643 const Attribute* fInEllipseOffsets1;
644 Mode fMode; 644 Mode fMode;
645 645
646 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 646 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
647 647
648 typedef GrGeometryProcessor INHERITED; 648 typedef GrGeometryProcessor INHERITED;
649 }; 649 };
650 650
651 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DIEllipseEdgeEffect); 651 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(DIEllipseEdgeEffect);
652 652
653 GrGeometryProcessor* DIEllipseEdgeEffect::TestCreate(SkRandom* random, 653 GrGeometryProcessor* DIEllipseEdgeEffect::TestCreate(SkRandom* random,
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
1422 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : 1422 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 :
1423 SK_ARRAY_COUNT(gRRectIndices); 1423 SK_ARRAY_COUNT(gRRectIndices);
1424 target->setIndexSourceToBuffer(indexBuffer); 1424 target->setIndexSourceToBuffer(indexBuffer);
1425 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt, 1425 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt,
1426 &bounds); 1426 &bounds);
1427 } 1427 }
1428 1428
1429 target->resetIndexSource(); 1429 target->resetIndexSource();
1430 return true; 1430 return true;
1431 } 1431 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698