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

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

Issue 1037793002: C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla} (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: git cl web Created 5 years, 8 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/GrInOrderDrawBuffer.cpp ('k') | src/gpu/GrPathProcessor.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 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 "GrBatch.h" 10 #include "GrBatch.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 class CircleEdgeEffect : public GrGeometryProcessor { 71 class CircleEdgeEffect : public GrGeometryProcessor {
72 public: 72 public:
73 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) { 73 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) {
74 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix)); 74 return SkNEW_ARGS(CircleEdgeEffect, (color, stroke, localMatrix));
75 } 75 }
76 76
77 const Attribute* inPosition() const { return fInPosition; } 77 const Attribute* inPosition() const { return fInPosition; }
78 const Attribute* inCircleEdge() const { return fInCircleEdge; } 78 const Attribute* inCircleEdge() const { return fInCircleEdge; }
79 virtual ~CircleEdgeEffect() {} 79 virtual ~CircleEdgeEffect() {}
80 80
81 const char* name() const SK_OVERRIDE { return "CircleEdge"; } 81 const char* name() const override { return "CircleEdge"; }
82 82
83 inline bool isStroked() const { return fStroke; } 83 inline bool isStroked() const { return fStroke; }
84 84
85 class GLProcessor : public GrGLGeometryProcessor { 85 class GLProcessor : public GrGLGeometryProcessor {
86 public: 86 public:
87 GLProcessor(const GrGeometryProcessor&, 87 GLProcessor(const GrGeometryProcessor&,
88 const GrBatchTracker&) 88 const GrBatchTracker&)
89 : fColor(GrColor_ILLEGAL) {} 89 : fColor(GrColor_ILLEGAL) {}
90 90
91 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{ 91 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{
92 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>(); 92 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
93 GrGLGPBuilder* pb = args.fPB; 93 GrGLGPBuilder* pb = args.fPB;
94 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 94 const BatchTracker& local = args.fBT.cast<BatchTracker>();
95 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 95 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
96 96
97 // emit attributes 97 // emit attributes
98 vsBuilder->emitAttributes(ce); 98 vsBuilder->emitAttributes(ce);
99 99
100 GrGLVertToFrag v(kVec4f_GrSLType); 100 GrGLVertToFrag v(kVec4f_GrSLType);
101 args.fPB->addVarying("CircleEdge", &v); 101 args.fPB->addVarying("CircleEdge", &v);
(...skipping 29 matching lines...) Expand all
131 const BatchTracker& local = bt.cast<BatchTracker>(); 131 const BatchTracker& local = bt.cast<BatchTracker>();
132 const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>(); 132 const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>();
133 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; 133 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0;
134 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; 134 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
135 key |= ComputePosKey(gp.viewMatrix()) << 2; 135 key |= ComputePosKey(gp.viewMatrix()) << 2;
136 b->add32(key << 16 | local.fInputColorType); 136 b->add32(key << 16 | local.fInputColorType);
137 } 137 }
138 138
139 virtual void setData(const GrGLProgramDataManager& pdman, 139 virtual void setData(const GrGLProgramDataManager& pdman,
140 const GrPrimitiveProcessor& gp, 140 const GrPrimitiveProcessor& gp,
141 const GrBatchTracker& bt) SK_OVERRIDE { 141 const GrBatchTracker& bt) override {
142 this->setUniformViewMatrix(pdman, gp.viewMatrix()); 142 this->setUniformViewMatrix(pdman, gp.viewMatrix());
143 143
144 const BatchTracker& local = bt.cast<BatchTracker>(); 144 const BatchTracker& local = bt.cast<BatchTracker>();
145 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 145 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
146 GrGLfloat c[4]; 146 GrGLfloat c[4];
147 GrColorToRGBAFloat(local.fColor, c); 147 GrColorToRGBAFloat(local.fColor, c);
148 pdman.set4fv(fColorUniform, 1, c); 148 pdman.set4fv(fColorUniform, 1, c);
149 fColor = local.fColor; 149 fColor = local.fColor;
150 } 150 }
151 } 151 }
152 152
153 private: 153 private:
154 GrColor fColor; 154 GrColor fColor;
155 UniformHandle fColorUniform; 155 UniformHandle fColorUniform;
156 typedef GrGLGeometryProcessor INHERITED; 156 typedef GrGLGeometryProcessor INHERITED;
157 }; 157 };
158 158
159 virtual void getGLProcessorKey(const GrBatchTracker& bt, 159 virtual void getGLProcessorKey(const GrBatchTracker& bt,
160 const GrGLCaps& caps, 160 const GrGLCaps& caps,
161 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 161 GrProcessorKeyBuilder* b) const override {
162 GLProcessor::GenKey(*this, bt, caps, b); 162 GLProcessor::GenKey(*this, bt, caps, b);
163 } 163 }
164 164
165 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 165 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
166 const GrGLCaps&) const SK_O VERRIDE { 166 const GrGLCaps&) const over ride {
167 return SkNEW_ARGS(GLProcessor, (*this, bt)); 167 return SkNEW_ARGS(GLProcessor, (*this, bt));
168 } 168 }
169 169
170 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const SK_OVERRIDE { 170 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
171 BatchTracker* local = bt->cast<BatchTracker>(); 171 BatchTracker* local = bt->cast<BatchTracker>();
172 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 172 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
173 local->fUsesLocalCoords = init.fUsesLocalCoords; 173 local->fUsesLocalCoords = init.fUsesLocalCoords;
174 } 174 }
175 175
176 bool onCanMakeEqual(const GrBatchTracker& m, 176 bool onCanMakeEqual(const GrBatchTracker& m,
177 const GrGeometryProcessor& that, 177 const GrGeometryProcessor& that,
178 const GrBatchTracker& t) const SK_OVERRIDE { 178 const GrBatchTracker& t) const override {
179 const BatchTracker& mine = m.cast<BatchTracker>(); 179 const BatchTracker& mine = m.cast<BatchTracker>();
180 const BatchTracker& theirs = t.cast<BatchTracker>(); 180 const BatchTracker& theirs = t.cast<BatchTracker>();
181 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 181 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
182 that, theirs.fUsesLocalCoords) && 182 that, theirs.fUsesLocalCoords) &&
183 CanCombineOutput(mine.fInputColorType, mine.fColor, 183 CanCombineOutput(mine.fInputColorType, mine.fColor,
184 theirs.fInputColorType, theirs.fColor); 184 theirs.fInputColorType, theirs.fColor);
185 } 185 }
186 186
187 private: 187 private:
188 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) 188 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix)
189 : INHERITED(color, SkMatrix::I(), localMatrix) { 189 : INHERITED(color, SkMatrix::I(), localMatrix) {
190 this->initClassID<CircleEdgeEffect>(); 190 this->initClassID<CircleEdgeEffect>();
191 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType)); 191 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
192 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", 192 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge",
193 kVec4f_GrVertexAttrib Type)); 193 kVec4f_GrVertexAttrib Type));
194 fStroke = stroke; 194 fStroke = stroke;
195 } 195 }
196 196
197 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 197 bool onIsEqual(const GrGeometryProcessor& other) const override {
198 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>(); 198 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>();
199 return cee.fStroke == fStroke; 199 return cee.fStroke == fStroke;
200 } 200 }
201 201
202 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERR IDE { 202 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
203 out->setUnknownSingleComponent(); 203 out->setUnknownSingleComponent();
204 } 204 }
205 205
206 struct BatchTracker { 206 struct BatchTracker {
207 GrGPInput fInputColorType; 207 GrGPInput fInputColorType;
208 GrColor fColor; 208 GrColor fColor;
209 bool fUsesLocalCoords; 209 bool fUsesLocalCoords;
210 }; 210 };
211 211
212 const Attribute* fInPosition; 212 const Attribute* fInPosition;
(...skipping 27 matching lines...) Expand all
240 */ 240 */
241 241
242 class EllipseEdgeEffect : public GrGeometryProcessor { 242 class EllipseEdgeEffect : public GrGeometryProcessor {
243 public: 243 public:
244 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) { 244 static GrGeometryProcessor* Create(GrColor color, bool stroke, const SkMatri x& localMatrix) {
245 return SkNEW_ARGS(EllipseEdgeEffect, (color, stroke, localMatrix)); 245 return SkNEW_ARGS(EllipseEdgeEffect, (color, stroke, localMatrix));
246 } 246 }
247 247
248 virtual ~EllipseEdgeEffect() {} 248 virtual ~EllipseEdgeEffect() {}
249 249
250 const char* name() const SK_OVERRIDE { return "EllipseEdge"; } 250 const char* name() const override { return "EllipseEdge"; }
251 251
252 const Attribute* inPosition() const { return fInPosition; } 252 const Attribute* inPosition() const { return fInPosition; }
253 const Attribute* inEllipseOffset() const { return fInEllipseOffset; } 253 const Attribute* inEllipseOffset() const { return fInEllipseOffset; }
254 const Attribute* inEllipseRadii() const { return fInEllipseRadii; } 254 const Attribute* inEllipseRadii() const { return fInEllipseRadii; }
255 255
256 inline bool isStroked() const { return fStroke; } 256 inline bool isStroked() const { return fStroke; }
257 257
258 class GLProcessor : public GrGLGeometryProcessor { 258 class GLProcessor : public GrGLGeometryProcessor {
259 public: 259 public:
260 GLProcessor(const GrGeometryProcessor&, 260 GLProcessor(const GrGeometryProcessor&,
261 const GrBatchTracker&) 261 const GrBatchTracker&)
262 : fColor(GrColor_ILLEGAL) {} 262 : fColor(GrColor_ILLEGAL) {}
263 263
264 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{ 264 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{
265 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>(); 265 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
266 GrGLGPBuilder* pb = args.fPB; 266 GrGLGPBuilder* pb = args.fPB;
267 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 267 const BatchTracker& local = args.fBT.cast<BatchTracker>();
268 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 268 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
269 269
270 // emit attributes 270 // emit attributes
271 vsBuilder->emitAttributes(ee); 271 vsBuilder->emitAttributes(ee);
272 272
273 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType); 273 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType);
274 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets); 274 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 const BatchTracker& local = bt.cast<BatchTracker>(); 325 const BatchTracker& local = bt.cast<BatchTracker>();
326 const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>( ); 326 const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>( );
327 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; 327 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0;
328 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; 328 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
329 key |= ComputePosKey(gp.viewMatrix()) << 2; 329 key |= ComputePosKey(gp.viewMatrix()) << 2;
330 b->add32(key << 16 | local.fInputColorType); 330 b->add32(key << 16 | local.fInputColorType);
331 } 331 }
332 332
333 virtual void setData(const GrGLProgramDataManager& pdman, 333 virtual void setData(const GrGLProgramDataManager& pdman,
334 const GrPrimitiveProcessor& gp, 334 const GrPrimitiveProcessor& gp,
335 const GrBatchTracker& bt) SK_OVERRIDE { 335 const GrBatchTracker& bt) override {
336 this->setUniformViewMatrix(pdman, gp.viewMatrix()); 336 this->setUniformViewMatrix(pdman, gp.viewMatrix());
337 337
338 const BatchTracker& local = bt.cast<BatchTracker>(); 338 const BatchTracker& local = bt.cast<BatchTracker>();
339 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 339 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
340 GrGLfloat c[4]; 340 GrGLfloat c[4];
341 GrColorToRGBAFloat(local.fColor, c); 341 GrColorToRGBAFloat(local.fColor, c);
342 pdman.set4fv(fColorUniform, 1, c); 342 pdman.set4fv(fColorUniform, 1, c);
343 fColor = local.fColor; 343 fColor = local.fColor;
344 } 344 }
345 } 345 }
346 346
347 private: 347 private:
348 GrColor fColor; 348 GrColor fColor;
349 UniformHandle fColorUniform; 349 UniformHandle fColorUniform;
350 350
351 typedef GrGLGeometryProcessor INHERITED; 351 typedef GrGLGeometryProcessor INHERITED;
352 }; 352 };
353 353
354 virtual void getGLProcessorKey(const GrBatchTracker& bt, 354 virtual void getGLProcessorKey(const GrBatchTracker& bt,
355 const GrGLCaps& caps, 355 const GrGLCaps& caps,
356 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 356 GrProcessorKeyBuilder* b) const override {
357 GLProcessor::GenKey(*this, bt, caps, b); 357 GLProcessor::GenKey(*this, bt, caps, b);
358 } 358 }
359 359
360 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 360 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
361 const GrGLCaps&) const SK_O VERRIDE { 361 const GrGLCaps&) const over ride {
362 return SkNEW_ARGS(GLProcessor, (*this, bt)); 362 return SkNEW_ARGS(GLProcessor, (*this, bt));
363 } 363 }
364 364
365 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const SK_OVERRIDE { 365 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
366 BatchTracker* local = bt->cast<BatchTracker>(); 366 BatchTracker* local = bt->cast<BatchTracker>();
367 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 367 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
368 local->fUsesLocalCoords = init.fUsesLocalCoords; 368 local->fUsesLocalCoords = init.fUsesLocalCoords;
369 } 369 }
370 370
371 bool onCanMakeEqual(const GrBatchTracker& m, 371 bool onCanMakeEqual(const GrBatchTracker& m,
372 const GrGeometryProcessor& that, 372 const GrGeometryProcessor& that,
373 const GrBatchTracker& t) const SK_OVERRIDE { 373 const GrBatchTracker& t) const override {
374 const BatchTracker& mine = m.cast<BatchTracker>(); 374 const BatchTracker& mine = m.cast<BatchTracker>();
375 const BatchTracker& theirs = t.cast<BatchTracker>(); 375 const BatchTracker& theirs = t.cast<BatchTracker>();
376 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 376 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
377 that, theirs.fUsesLocalCoords) && 377 that, theirs.fUsesLocalCoords) &&
378 CanCombineOutput(mine.fInputColorType, mine.fColor, 378 CanCombineOutput(mine.fInputColorType, mine.fColor,
379 theirs.fInputColorType, theirs.fColor); 379 theirs.fInputColorType, theirs.fColor);
380 } 380 }
381 381
382 private: 382 private:
383 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) 383 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix)
384 : INHERITED(color, SkMatrix::I(), localMatrix) { 384 : INHERITED(color, SkMatrix::I(), localMatrix) {
385 this->initClassID<EllipseEdgeEffect>(); 385 this->initClassID<EllipseEdgeEffect>();
386 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType)); 386 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
387 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", 387 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset",
388 kVec2f_GrVertexAtt ribType)); 388 kVec2f_GrVertexAtt ribType));
389 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii", 389 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii",
390 kVec4f_GrVertexAttr ibType)); 390 kVec4f_GrVertexAttr ibType));
391 fStroke = stroke; 391 fStroke = stroke;
392 } 392 }
393 393
394 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 394 bool onIsEqual(const GrGeometryProcessor& other) const override {
395 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>(); 395 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>();
396 return eee.fStroke == fStroke; 396 return eee.fStroke == fStroke;
397 } 397 }
398 398
399 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERR IDE { 399 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
400 out->setUnknownSingleComponent(); 400 out->setUnknownSingleComponent();
401 } 401 }
402 402
403 struct BatchTracker { 403 struct BatchTracker {
404 GrGPInput fInputColorType; 404 GrGPInput fInputColorType;
405 GrColor fColor; 405 GrColor fColor;
406 bool fUsesLocalCoords; 406 bool fUsesLocalCoords;
407 }; 407 };
408 408
409 const Attribute* fInPosition; 409 const Attribute* fInPosition;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 class DIEllipseEdgeEffect : public GrGeometryProcessor { 441 class DIEllipseEdgeEffect : public GrGeometryProcessor {
442 public: 442 public:
443 enum Mode { kStroke = 0, kHairline, kFill }; 443 enum Mode { kStroke = 0, kHairline, kFill };
444 444
445 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , Mode mode) { 445 static GrGeometryProcessor* Create(GrColor color, const SkMatrix& viewMatrix , Mode mode) {
446 return SkNEW_ARGS(DIEllipseEdgeEffect, (color, viewMatrix, mode)); 446 return SkNEW_ARGS(DIEllipseEdgeEffect, (color, viewMatrix, mode));
447 } 447 }
448 448
449 virtual ~DIEllipseEdgeEffect() {} 449 virtual ~DIEllipseEdgeEffect() {}
450 450
451 const char* name() const SK_OVERRIDE { return "DIEllipseEdge"; } 451 const char* name() const override { return "DIEllipseEdge"; }
452 452
453 const Attribute* inPosition() const { return fInPosition; } 453 const Attribute* inPosition() const { return fInPosition; }
454 const Attribute* inEllipseOffsets0() const { return fInEllipseOffsets0; } 454 const Attribute* inEllipseOffsets0() const { return fInEllipseOffsets0; }
455 const Attribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } 455 const Attribute* inEllipseOffsets1() const { return fInEllipseOffsets1; }
456 456
457 inline Mode getMode() const { return fMode; } 457 inline Mode getMode() const { return fMode; }
458 458
459 class GLProcessor : public GrGLGeometryProcessor { 459 class GLProcessor : public GrGLGeometryProcessor {
460 public: 460 public:
461 GLProcessor(const GrGeometryProcessor&, 461 GLProcessor(const GrGeometryProcessor&,
462 const GrBatchTracker&) 462 const GrBatchTracker&)
463 : fColor(GrColor_ILLEGAL) {} 463 : fColor(GrColor_ILLEGAL) {}
464 464
465 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{ 465 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{
466 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ; 466 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ;
467 GrGLGPBuilder* pb = args.fPB; 467 GrGLGPBuilder* pb = args.fPB;
468 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 468 const BatchTracker& local = args.fBT.cast<BatchTracker>();
469 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 469 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
470 470
471 // emit attributes 471 // emit attributes
472 vsBuilder->emitAttributes(ee); 472 vsBuilder->emitAttributes(ee);
473 473
474 GrGLVertToFrag offsets0(kVec2f_GrSLType); 474 GrGLVertToFrag offsets0(kVec2f_GrSLType);
475 args.fPB->addVarying("EllipseOffsets0", &offsets0); 475 args.fPB->addVarying("EllipseOffsets0", &offsets0);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 const BatchTracker& local = bt.cast<BatchTracker>(); 540 const BatchTracker& local = bt.cast<BatchTracker>();
541 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>(); 541 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>();
542 uint16_t key = ellipseEffect.getMode(); 542 uint16_t key = ellipseEffect.getMode();
543 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0; 543 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0;
544 key |= ComputePosKey(gp.viewMatrix()) << 9; 544 key |= ComputePosKey(gp.viewMatrix()) << 9;
545 b->add32(key << 16 | local.fInputColorType); 545 b->add32(key << 16 | local.fInputColorType);
546 } 546 }
547 547
548 virtual void setData(const GrGLProgramDataManager& pdman, 548 virtual void setData(const GrGLProgramDataManager& pdman,
549 const GrPrimitiveProcessor& gp, 549 const GrPrimitiveProcessor& gp,
550 const GrBatchTracker& bt) SK_OVERRIDE { 550 const GrBatchTracker& bt) override {
551 this->setUniformViewMatrix(pdman, gp.viewMatrix()); 551 this->setUniformViewMatrix(pdman, gp.viewMatrix());
552 552
553 const BatchTracker& local = bt.cast<BatchTracker>(); 553 const BatchTracker& local = bt.cast<BatchTracker>();
554 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 554 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
555 GrGLfloat c[4]; 555 GrGLfloat c[4];
556 GrColorToRGBAFloat(local.fColor, c); 556 GrColorToRGBAFloat(local.fColor, c);
557 pdman.set4fv(fColorUniform, 1, c); 557 pdman.set4fv(fColorUniform, 1, c);
558 fColor = local.fColor; 558 fColor = local.fColor;
559 } 559 }
560 } 560 }
561 561
562 private: 562 private:
563 GrColor fColor; 563 GrColor fColor;
564 UniformHandle fColorUniform; 564 UniformHandle fColorUniform;
565 565
566 typedef GrGLGeometryProcessor INHERITED; 566 typedef GrGLGeometryProcessor INHERITED;
567 }; 567 };
568 568
569 virtual void getGLProcessorKey(const GrBatchTracker& bt, 569 virtual void getGLProcessorKey(const GrBatchTracker& bt,
570 const GrGLCaps& caps, 570 const GrGLCaps& caps,
571 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 571 GrProcessorKeyBuilder* b) const override {
572 GLProcessor::GenKey(*this, bt, caps, b); 572 GLProcessor::GenKey(*this, bt, caps, b);
573 } 573 }
574 574
575 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, 575 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
576 const GrGLCaps&) const SK_O VERRIDE { 576 const GrGLCaps&) const over ride {
577 return SkNEW_ARGS(GLProcessor, (*this, bt)); 577 return SkNEW_ARGS(GLProcessor, (*this, bt));
578 } 578 }
579 579
580 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const SK_OVERRIDE { 580 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const override {
581 BatchTracker* local = bt->cast<BatchTracker>(); 581 BatchTracker* local = bt->cast<BatchTracker>();
582 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 582 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
583 local->fUsesLocalCoords = init.fUsesLocalCoords; 583 local->fUsesLocalCoords = init.fUsesLocalCoords;
584 } 584 }
585 585
586 bool onCanMakeEqual(const GrBatchTracker& m, 586 bool onCanMakeEqual(const GrBatchTracker& m,
587 const GrGeometryProcessor& that, 587 const GrGeometryProcessor& that,
588 const GrBatchTracker& t) const SK_OVERRIDE { 588 const GrBatchTracker& t) const override {
589 const BatchTracker& mine = m.cast<BatchTracker>(); 589 const BatchTracker& mine = m.cast<BatchTracker>();
590 const BatchTracker& theirs = t.cast<BatchTracker>(); 590 const BatchTracker& theirs = t.cast<BatchTracker>();
591 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, 591 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
592 that, theirs.fUsesLocalCoords) && 592 that, theirs.fUsesLocalCoords) &&
593 CanCombineOutput(mine.fInputColorType, mine.fColor, 593 CanCombineOutput(mine.fInputColorType, mine.fColor,
594 theirs.fInputColorType, theirs.fColor); 594 theirs.fInputColorType, theirs.fColor);
595 } 595 }
596 596
597 private: 597 private:
598 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode) 598 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode)
599 : INHERITED(color, viewMatrix) { 599 : INHERITED(color, viewMatrix) {
600 this->initClassID<DIEllipseEdgeEffect>(); 600 this->initClassID<DIEllipseEdgeEffect>();
601 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType)); 601 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe rtexAttribType));
602 fInEllipseOffsets0 = &this->addVertexAttrib(Attribute("inEllipseOffsets0 ", 602 fInEllipseOffsets0 = &this->addVertexAttrib(Attribute("inEllipseOffsets0 ",
603 kVec2f_GrVertexA ttribType)); 603 kVec2f_GrVertexA ttribType));
604 fInEllipseOffsets1 = &this->addVertexAttrib(Attribute("inEllipseOffsets1 ", 604 fInEllipseOffsets1 = &this->addVertexAttrib(Attribute("inEllipseOffsets1 ",
605 kVec2f_GrVertexA ttribType)); 605 kVec2f_GrVertexA ttribType));
606 fMode = mode; 606 fMode = mode;
607 } 607 }
608 608
609 bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 609 bool onIsEqual(const GrGeometryProcessor& other) const override {
610 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>(); 610 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>();
611 return eee.fMode == fMode; 611 return eee.fMode == fMode;
612 } 612 }
613 613
614 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERR IDE { 614 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
615 out->setUnknownSingleComponent(); 615 out->setUnknownSingleComponent();
616 } 616 }
617 617
618 struct BatchTracker { 618 struct BatchTracker {
619 GrGPInput fInputColorType; 619 GrGPInput fInputColorType;
620 GrColor fColor; 620 GrColor fColor;
621 bool fUsesLocalCoords; 621 bool fUsesLocalCoords;
622 }; 622 };
623 623
624 const Attribute* fInPosition; 624 const Attribute* fInPosition;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 SkScalar fInnerRadius; 692 SkScalar fInnerRadius;
693 SkScalar fOuterRadius; 693 SkScalar fOuterRadius;
694 bool fStroke; 694 bool fStroke;
695 SkRect fDevBounds; 695 SkRect fDevBounds;
696 }; 696 };
697 697
698 static GrBatch* Create(const Geometry& geometry) { 698 static GrBatch* Create(const Geometry& geometry) {
699 return SkNEW_ARGS(CircleBatch, (geometry)); 699 return SkNEW_ARGS(CircleBatch, (geometry));
700 } 700 }
701 701
702 const char* name() const SK_OVERRIDE { return "CircleBatch"; } 702 const char* name() const override { return "CircleBatch"; }
703 703
704 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { 704 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
705 // When this is called on a batch, there is only one geometry bundle 705 // When this is called on a batch, there is only one geometry bundle
706 out->setKnownFourComponents(fGeoData[0].fColor); 706 out->setKnownFourComponents(fGeoData[0].fColor);
707 } 707 }
708 708
709 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E { 709 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
710 out->setUnknownSingleComponent(); 710 out->setUnknownSingleComponent();
711 } 711 }
712 712
713 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { 713 void initBatchTracker(const GrPipelineInfo& init) override {
714 // Handle any color overrides 714 // Handle any color overrides
715 if (init.fColorIgnored) { 715 if (init.fColorIgnored) {
716 fGeoData[0].fColor = GrColor_ILLEGAL; 716 fGeoData[0].fColor = GrColor_ILLEGAL;
717 } else if (GrColor_ILLEGAL != init.fOverrideColor) { 717 } else if (GrColor_ILLEGAL != init.fOverrideColor) {
718 fGeoData[0].fColor = init.fOverrideColor; 718 fGeoData[0].fColor = init.fOverrideColor;
719 } 719 }
720 720
721 // setup batch properties 721 // setup batch properties
722 fBatch.fColorIgnored = init.fColorIgnored; 722 fBatch.fColorIgnored = init.fColorIgnored;
723 fBatch.fColor = fGeoData[0].fColor; 723 fBatch.fColor = fGeoData[0].fColor;
724 fBatch.fStroke = fGeoData[0].fStroke; 724 fBatch.fStroke = fGeoData[0].fStroke;
725 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; 725 fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
726 fBatch.fCoverageIgnored = init.fCoverageIgnored; 726 fBatch.fCoverageIgnored = init.fCoverageIgnored;
727 } 727 }
728 728
729 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) SK_OVERRIDE { 729 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
730 SkMatrix invert; 730 SkMatrix invert;
731 if (!this->viewMatrix().invert(&invert)) { 731 if (!this->viewMatrix().invert(&invert)) {
732 return; 732 return;
733 } 733 }
734 734
735 // Setup geometry processor 735 // Setup geometry processor
736 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(), 736 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(),
737 this->stro ke(), 737 this->stro ke(),
738 invert)); 738 invert));
739 739
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 } 829 }
830 830
831 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 831 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
832 832
833 private: 833 private:
834 CircleBatch(const Geometry& geometry) { 834 CircleBatch(const Geometry& geometry) {
835 this->initClassID<CircleBatch>(); 835 this->initClassID<CircleBatch>();
836 fGeoData.push_back(geometry); 836 fGeoData.push_back(geometry);
837 } 837 }
838 838
839 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { 839 bool onCombineIfPossible(GrBatch* t) override {
840 CircleBatch* that = t->cast<CircleBatch>(); 840 CircleBatch* that = t->cast<CircleBatch>();
841 841
842 // TODO use vertex color to avoid breaking batches 842 // TODO use vertex color to avoid breaking batches
843 if (this->color() != that->color()) { 843 if (this->color() != that->color()) {
844 return false; 844 return false;
845 } 845 }
846 846
847 if (this->stroke() != that->stroke()) { 847 if (this->stroke() != that->stroke()) {
848 return false; 848 return false;
849 } 849 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 SkScalar fInnerXRadius; 948 SkScalar fInnerXRadius;
949 SkScalar fInnerYRadius; 949 SkScalar fInnerYRadius;
950 bool fStroke; 950 bool fStroke;
951 SkRect fDevBounds; 951 SkRect fDevBounds;
952 }; 952 };
953 953
954 static GrBatch* Create(const Geometry& geometry) { 954 static GrBatch* Create(const Geometry& geometry) {
955 return SkNEW_ARGS(EllipseBatch, (geometry)); 955 return SkNEW_ARGS(EllipseBatch, (geometry));
956 } 956 }
957 957
958 const char* name() const SK_OVERRIDE { return "EllipseBatch"; } 958 const char* name() const override { return "EllipseBatch"; }
959 959
960 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { 960 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
961 // When this is called on a batch, there is only one geometry bundle 961 // When this is called on a batch, there is only one geometry bundle
962 out->setKnownFourComponents(fGeoData[0].fColor); 962 out->setKnownFourComponents(fGeoData[0].fColor);
963 } 963 }
964 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E { 964 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
965 out->setUnknownSingleComponent(); 965 out->setUnknownSingleComponent();
966 } 966 }
967 967
968 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { 968 void initBatchTracker(const GrPipelineInfo& init) override {
969 // Handle any color overrides 969 // Handle any color overrides
970 if (init.fColorIgnored) { 970 if (init.fColorIgnored) {
971 fGeoData[0].fColor = GrColor_ILLEGAL; 971 fGeoData[0].fColor = GrColor_ILLEGAL;
972 } else if (GrColor_ILLEGAL != init.fOverrideColor) { 972 } else if (GrColor_ILLEGAL != init.fOverrideColor) {
973 fGeoData[0].fColor = init.fOverrideColor; 973 fGeoData[0].fColor = init.fOverrideColor;
974 } 974 }
975 975
976 // setup batch properties 976 // setup batch properties
977 fBatch.fColorIgnored = init.fColorIgnored; 977 fBatch.fColorIgnored = init.fColorIgnored;
978 fBatch.fColor = fGeoData[0].fColor; 978 fBatch.fColor = fGeoData[0].fColor;
979 fBatch.fStroke = fGeoData[0].fStroke; 979 fBatch.fStroke = fGeoData[0].fStroke;
980 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; 980 fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
981 fBatch.fCoverageIgnored = init.fCoverageIgnored; 981 fBatch.fCoverageIgnored = init.fCoverageIgnored;
982 } 982 }
983 983
984 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) SK_OVERRIDE { 984 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
985 SkMatrix invert; 985 SkMatrix invert;
986 if (!this->viewMatrix().invert(&invert)) { 986 if (!this->viewMatrix().invert(&invert)) {
987 return; 987 return;
988 } 988 }
989 989
990 // Setup geometry processor 990 // Setup geometry processor
991 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(), 991 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(),
992 this->str oke(), 992 this->str oke(),
993 invert)); 993 invert));
994 994
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 } 1089 }
1090 1090
1091 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 1091 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
1092 1092
1093 private: 1093 private:
1094 EllipseBatch(const Geometry& geometry) { 1094 EllipseBatch(const Geometry& geometry) {
1095 this->initClassID<EllipseBatch>(); 1095 this->initClassID<EllipseBatch>();
1096 fGeoData.push_back(geometry); 1096 fGeoData.push_back(geometry);
1097 } 1097 }
1098 1098
1099 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { 1099 bool onCombineIfPossible(GrBatch* t) override {
1100 EllipseBatch* that = t->cast<EllipseBatch>(); 1100 EllipseBatch* that = t->cast<EllipseBatch>();
1101 1101
1102 // TODO use vertex color to avoid breaking batches 1102 // TODO use vertex color to avoid breaking batches
1103 if (this->color() != that->color()) { 1103 if (this->color() != that->color()) {
1104 return false; 1104 return false;
1105 } 1105 }
1106 1106
1107 if (this->stroke() != that->stroke()) { 1107 if (this->stroke() != that->stroke()) {
1108 return false; 1108 return false;
1109 } 1109 }
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 SkScalar fGeoDx; 1249 SkScalar fGeoDx;
1250 SkScalar fGeoDy; 1250 SkScalar fGeoDy;
1251 DIEllipseEdgeEffect::Mode fMode; 1251 DIEllipseEdgeEffect::Mode fMode;
1252 SkRect fDevBounds; 1252 SkRect fDevBounds;
1253 }; 1253 };
1254 1254
1255 static GrBatch* Create(const Geometry& geometry) { 1255 static GrBatch* Create(const Geometry& geometry) {
1256 return SkNEW_ARGS(DIEllipseBatch, (geometry)); 1256 return SkNEW_ARGS(DIEllipseBatch, (geometry));
1257 } 1257 }
1258 1258
1259 const char* name() const SK_OVERRIDE { return "DIEllipseBatch"; } 1259 const char* name() const override { return "DIEllipseBatch"; }
1260 1260
1261 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { 1261 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
1262 // When this is called on a batch, there is only one geometry bundle 1262 // When this is called on a batch, there is only one geometry bundle
1263 out->setKnownFourComponents(fGeoData[0].fColor); 1263 out->setKnownFourComponents(fGeoData[0].fColor);
1264 } 1264 }
1265 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E { 1265 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
1266 out->setUnknownSingleComponent(); 1266 out->setUnknownSingleComponent();
1267 } 1267 }
1268 1268
1269 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { 1269 void initBatchTracker(const GrPipelineInfo& init) override {
1270 // Handle any color overrides 1270 // Handle any color overrides
1271 if (init.fColorIgnored) { 1271 if (init.fColorIgnored) {
1272 fGeoData[0].fColor = GrColor_ILLEGAL; 1272 fGeoData[0].fColor = GrColor_ILLEGAL;
1273 } else if (GrColor_ILLEGAL != init.fOverrideColor) { 1273 } else if (GrColor_ILLEGAL != init.fOverrideColor) {
1274 fGeoData[0].fColor = init.fOverrideColor; 1274 fGeoData[0].fColor = init.fOverrideColor;
1275 } 1275 }
1276 1276
1277 // setup batch properties 1277 // setup batch properties
1278 fBatch.fColorIgnored = init.fColorIgnored; 1278 fBatch.fColorIgnored = init.fColorIgnored;
1279 fBatch.fColor = fGeoData[0].fColor; 1279 fBatch.fColor = fGeoData[0].fColor;
1280 fBatch.fMode = fGeoData[0].fMode; 1280 fBatch.fMode = fGeoData[0].fMode;
1281 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; 1281 fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
1282 fBatch.fCoverageIgnored = init.fCoverageIgnored; 1282 fBatch.fCoverageIgnored = init.fCoverageIgnored;
1283 } 1283 }
1284 1284
1285 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) SK_OVERRIDE { 1285 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
1286 // Setup geometry processor 1286 // Setup geometry processor
1287 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c olor(), 1287 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c olor(),
1288 this->v iewMatrix(), 1288 this->v iewMatrix(),
1289 this->m ode())); 1289 this->m ode()));
1290 1290
1291 batchTarget->initDraw(gp, pipeline); 1291 batchTarget->initDraw(gp, pipeline);
1292 1292
1293 // TODO this is hacky, but the only way we have to initialize the GP is to use the 1293 // TODO this is hacky, but the only way we have to initialize the GP is to use the
1294 // GrPipelineInfo struct so we can generate the correct shader. Once we have GrBatch 1294 // GrPipelineInfo struct so we can generate the correct shader. Once we have GrBatch
1295 // everywhere we can remove this nastiness 1295 // everywhere we can remove this nastiness
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 } 1381 }
1382 1382
1383 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 1383 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
1384 1384
1385 private: 1385 private:
1386 DIEllipseBatch(const Geometry& geometry) { 1386 DIEllipseBatch(const Geometry& geometry) {
1387 this->initClassID<DIEllipseBatch>(); 1387 this->initClassID<DIEllipseBatch>();
1388 fGeoData.push_back(geometry); 1388 fGeoData.push_back(geometry);
1389 } 1389 }
1390 1390
1391 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { 1391 bool onCombineIfPossible(GrBatch* t) override {
1392 DIEllipseBatch* that = t->cast<DIEllipseBatch>(); 1392 DIEllipseBatch* that = t->cast<DIEllipseBatch>();
1393 1393
1394 // TODO use vertex color to avoid breaking batches 1394 // TODO use vertex color to avoid breaking batches
1395 if (this->color() != that->color()) { 1395 if (this->color() != that->color()) {
1396 return false; 1396 return false;
1397 } 1397 }
1398 1398
1399 if (this->mode() != that->mode()) { 1399 if (this->mode() != that->mode()) {
1400 return false; 1400 return false;
1401 } 1401 }
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1636 SkScalar fInnerRadius; 1636 SkScalar fInnerRadius;
1637 SkScalar fOuterRadius; 1637 SkScalar fOuterRadius;
1638 bool fStroke; 1638 bool fStroke;
1639 SkRect fDevBounds; 1639 SkRect fDevBounds;
1640 }; 1640 };
1641 1641
1642 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB uffer) { 1642 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB uffer) {
1643 return SkNEW_ARGS(RRectCircleRendererBatch, (geometry, indexBuffer)); 1643 return SkNEW_ARGS(RRectCircleRendererBatch, (geometry, indexBuffer));
1644 } 1644 }
1645 1645
1646 const char* name() const SK_OVERRIDE { return "RRectCircleBatch"; } 1646 const char* name() const override { return "RRectCircleBatch"; }
1647 1647
1648 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { 1648 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
1649 // When this is called on a batch, there is only one geometry bundle 1649 // When this is called on a batch, there is only one geometry bundle
1650 out->setKnownFourComponents(fGeoData[0].fColor); 1650 out->setKnownFourComponents(fGeoData[0].fColor);
1651 } 1651 }
1652 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E { 1652 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
1653 out->setUnknownSingleComponent(); 1653 out->setUnknownSingleComponent();
1654 } 1654 }
1655 1655
1656 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { 1656 void initBatchTracker(const GrPipelineInfo& init) override {
1657 // Handle any color overrides 1657 // Handle any color overrides
1658 if (init.fColorIgnored) { 1658 if (init.fColorIgnored) {
1659 fGeoData[0].fColor = GrColor_ILLEGAL; 1659 fGeoData[0].fColor = GrColor_ILLEGAL;
1660 } else if (GrColor_ILLEGAL != init.fOverrideColor) { 1660 } else if (GrColor_ILLEGAL != init.fOverrideColor) {
1661 fGeoData[0].fColor = init.fOverrideColor; 1661 fGeoData[0].fColor = init.fOverrideColor;
1662 } 1662 }
1663 1663
1664 // setup batch properties 1664 // setup batch properties
1665 fBatch.fColorIgnored = init.fColorIgnored; 1665 fBatch.fColorIgnored = init.fColorIgnored;
1666 fBatch.fColor = fGeoData[0].fColor; 1666 fBatch.fColor = fGeoData[0].fColor;
1667 fBatch.fStroke = fGeoData[0].fStroke; 1667 fBatch.fStroke = fGeoData[0].fStroke;
1668 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; 1668 fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
1669 fBatch.fCoverageIgnored = init.fCoverageIgnored; 1669 fBatch.fCoverageIgnored = init.fCoverageIgnored;
1670 } 1670 }
1671 1671
1672 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) SK_OVERRIDE { 1672 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
1673 // reset to device coordinates 1673 // reset to device coordinates
1674 SkMatrix invert; 1674 SkMatrix invert;
1675 if (!this->viewMatrix().invert(&invert)) { 1675 if (!this->viewMatrix().invert(&invert)) {
1676 SkDebugf("Failed to invert\n"); 1676 SkDebugf("Failed to invert\n");
1677 return; 1677 return;
1678 } 1678 }
1679 1679
1680 // Setup geometry processor 1680 // Setup geometry processor
1681 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(), 1681 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(),
1682 this->stro ke(), 1682 this->stro ke(),
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1789 1789
1790 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 1790 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
1791 1791
1792 private: 1792 private:
1793 RRectCircleRendererBatch(const Geometry& geometry, const GrIndexBuffer* inde xBuffer) 1793 RRectCircleRendererBatch(const Geometry& geometry, const GrIndexBuffer* inde xBuffer)
1794 : fIndexBuffer(indexBuffer) { 1794 : fIndexBuffer(indexBuffer) {
1795 this->initClassID<RRectCircleRendererBatch>(); 1795 this->initClassID<RRectCircleRendererBatch>();
1796 fGeoData.push_back(geometry); 1796 fGeoData.push_back(geometry);
1797 } 1797 }
1798 1798
1799 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { 1799 bool onCombineIfPossible(GrBatch* t) override {
1800 RRectCircleRendererBatch* that = t->cast<RRectCircleRendererBatch>(); 1800 RRectCircleRendererBatch* that = t->cast<RRectCircleRendererBatch>();
1801 1801
1802 // TODO use vertex color to avoid breaking batches 1802 // TODO use vertex color to avoid breaking batches
1803 if (this->color() != that->color()) { 1803 if (this->color() != that->color()) {
1804 return false; 1804 return false;
1805 } 1805 }
1806 1806
1807 if (this->stroke() != that->stroke()) { 1807 if (this->stroke() != that->stroke()) {
1808 return false; 1808 return false;
1809 } 1809 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1845 SkScalar fInnerXRadius; 1845 SkScalar fInnerXRadius;
1846 SkScalar fInnerYRadius; 1846 SkScalar fInnerYRadius;
1847 bool fStroke; 1847 bool fStroke;
1848 SkRect fDevBounds; 1848 SkRect fDevBounds;
1849 }; 1849 };
1850 1850
1851 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB uffer) { 1851 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB uffer) {
1852 return SkNEW_ARGS(RRectEllipseRendererBatch, (geometry, indexBuffer)); 1852 return SkNEW_ARGS(RRectEllipseRendererBatch, (geometry, indexBuffer));
1853 } 1853 }
1854 1854
1855 const char* name() const SK_OVERRIDE { return "RRectEllipseRendererBatch"; } 1855 const char* name() const override { return "RRectEllipseRendererBatch"; }
1856 1856
1857 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { 1857 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
1858 // When this is called on a batch, there is only one geometry bundle 1858 // When this is called on a batch, there is only one geometry bundle
1859 out->setKnownFourComponents(fGeoData[0].fColor); 1859 out->setKnownFourComponents(fGeoData[0].fColor);
1860 } 1860 }
1861 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E { 1861 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
1862 out->setUnknownSingleComponent(); 1862 out->setUnknownSingleComponent();
1863 } 1863 }
1864 1864
1865 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { 1865 void initBatchTracker(const GrPipelineInfo& init) override {
1866 // Handle any color overrides 1866 // Handle any color overrides
1867 if (init.fColorIgnored) { 1867 if (init.fColorIgnored) {
1868 fGeoData[0].fColor = GrColor_ILLEGAL; 1868 fGeoData[0].fColor = GrColor_ILLEGAL;
1869 } else if (GrColor_ILLEGAL != init.fOverrideColor) { 1869 } else if (GrColor_ILLEGAL != init.fOverrideColor) {
1870 fGeoData[0].fColor = init.fOverrideColor; 1870 fGeoData[0].fColor = init.fOverrideColor;
1871 } 1871 }
1872 1872
1873 // setup batch properties 1873 // setup batch properties
1874 fBatch.fColorIgnored = init.fColorIgnored; 1874 fBatch.fColorIgnored = init.fColorIgnored;
1875 fBatch.fColor = fGeoData[0].fColor; 1875 fBatch.fColor = fGeoData[0].fColor;
1876 fBatch.fStroke = fGeoData[0].fStroke; 1876 fBatch.fStroke = fGeoData[0].fStroke;
1877 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; 1877 fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
1878 fBatch.fCoverageIgnored = init.fCoverageIgnored; 1878 fBatch.fCoverageIgnored = init.fCoverageIgnored;
1879 } 1879 }
1880 1880
1881 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) SK_OVERRIDE { 1881 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
1882 // reset to device coordinates 1882 // reset to device coordinates
1883 SkMatrix invert; 1883 SkMatrix invert;
1884 if (!this->viewMatrix().invert(&invert)) { 1884 if (!this->viewMatrix().invert(&invert)) {
1885 SkDebugf("Failed to invert\n"); 1885 SkDebugf("Failed to invert\n");
1886 return; 1886 return;
1887 } 1887 }
1888 1888
1889 // Setup geometry processor 1889 // Setup geometry processor
1890 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(), 1890 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(),
1891 this->str oke(), 1891 this->str oke(),
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 2008
2009 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 2009 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
2010 2010
2011 private: 2011 private:
2012 RRectEllipseRendererBatch(const Geometry& geometry, const GrIndexBuffer* ind exBuffer) 2012 RRectEllipseRendererBatch(const Geometry& geometry, const GrIndexBuffer* ind exBuffer)
2013 : fIndexBuffer(indexBuffer) { 2013 : fIndexBuffer(indexBuffer) {
2014 this->initClassID<RRectEllipseRendererBatch>(); 2014 this->initClassID<RRectEllipseRendererBatch>();
2015 fGeoData.push_back(geometry); 2015 fGeoData.push_back(geometry);
2016 } 2016 }
2017 2017
2018 bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { 2018 bool onCombineIfPossible(GrBatch* t) override {
2019 RRectEllipseRendererBatch* that = t->cast<RRectEllipseRendererBatch>(); 2019 RRectEllipseRendererBatch* that = t->cast<RRectEllipseRendererBatch>();
2020 2020
2021 // TODO use vertex color to avoid breaking batches 2021 // TODO use vertex color to avoid breaking batches
2022 if (this->color() != that->color()) { 2022 if (this->color() != that->color()) {
2023 return false; 2023 return false;
2024 } 2024 }
2025 2025
2026 if (this->stroke() != that->stroke()) { 2026 if (this->stroke() != that->stroke()) {
2027 return false; 2027 return false;
2028 } 2028 }
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 geometry.fInnerXRadius = innerXRadius; 2220 geometry.fInnerXRadius = innerXRadius;
2221 geometry.fInnerYRadius = innerYRadius; 2221 geometry.fInnerYRadius = innerYRadius;
2222 geometry.fStroke = isStrokeOnly; 2222 geometry.fStroke = isStrokeOnly;
2223 geometry.fDevBounds = bounds; 2223 geometry.fDevBounds = bounds;
2224 2224
2225 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry, indexBuffer)); 2225 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry, indexBuffer));
2226 target->drawBatch(pipelineBuilder, batch, &bounds); 2226 target->drawBatch(pipelineBuilder, batch, &bounds);
2227 } 2227 }
2228 return true; 2228 return true;
2229 } 2229 }
OLDNEW
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.cpp ('k') | src/gpu/GrPathProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698