OLD | NEW |
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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 const GrGLSLCaps&) const ov
erride { | 167 const GrGLSLCaps&) const ov
erride { |
168 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 168 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
169 } | 169 } |
170 | 170 |
171 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { | 171 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { |
172 BatchTracker* local = bt->cast<BatchTracker>(); | 172 BatchTracker* local = bt->cast<BatchTracker>(); |
173 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); | 173 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
174 local->fUsesLocalCoords = init.fUsesLocalCoords; | 174 local->fUsesLocalCoords = init.fUsesLocalCoords; |
175 } | 175 } |
176 | 176 |
177 bool onCanMakeEqual(const GrBatchTracker& m, | |
178 const GrGeometryProcessor& that, | |
179 const GrBatchTracker& t) const override { | |
180 const BatchTracker& mine = m.cast<BatchTracker>(); | |
181 const BatchTracker& theirs = t.cast<BatchTracker>(); | |
182 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, | |
183 that, theirs.fUsesLocalCoords) && | |
184 CanCombineOutput(mine.fInputColorType, mine.fColor, | |
185 theirs.fInputColorType, theirs.fColor); | |
186 } | |
187 | |
188 private: | 177 private: |
189 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) | 178 CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
190 : INHERITED(color, SkMatrix::I(), localMatrix) { | 179 : INHERITED(color, SkMatrix::I(), localMatrix) { |
191 this->initClassID<CircleEdgeEffect>(); | 180 this->initClassID<CircleEdgeEffect>(); |
192 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); | 181 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); |
193 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", | 182 fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", |
194 kVec4f_GrVertexAttrib
Type)); | 183 kVec4f_GrVertexAttrib
Type)); |
195 fStroke = stroke; | 184 fStroke = stroke; |
196 } | 185 } |
197 | 186 |
198 bool onIsEqual(const GrGeometryProcessor& other) const override { | |
199 const CircleEdgeEffect& cee = other.cast<CircleEdgeEffect>(); | |
200 return cee.fStroke == fStroke; | |
201 } | |
202 | |
203 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override
{ | |
204 out->setUnknownSingleComponent(); | |
205 } | |
206 | |
207 struct BatchTracker { | 187 struct BatchTracker { |
208 GrGPInput fInputColorType; | 188 GrGPInput fInputColorType; |
209 GrColor fColor; | 189 GrColor fColor; |
210 bool fUsesLocalCoords; | 190 bool fUsesLocalCoords; |
211 }; | 191 }; |
212 | 192 |
213 const Attribute* fInPosition; | 193 const Attribute* fInPosition; |
214 const Attribute* fInCircleEdge; | 194 const Attribute* fInCircleEdge; |
215 bool fStroke; | 195 bool fStroke; |
216 | 196 |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 const GrGLSLCaps&) const ov
erride { | 342 const GrGLSLCaps&) const ov
erride { |
363 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 343 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
364 } | 344 } |
365 | 345 |
366 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { | 346 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { |
367 BatchTracker* local = bt->cast<BatchTracker>(); | 347 BatchTracker* local = bt->cast<BatchTracker>(); |
368 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); | 348 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
369 local->fUsesLocalCoords = init.fUsesLocalCoords; | 349 local->fUsesLocalCoords = init.fUsesLocalCoords; |
370 } | 350 } |
371 | 351 |
372 bool onCanMakeEqual(const GrBatchTracker& m, | |
373 const GrGeometryProcessor& that, | |
374 const GrBatchTracker& t) const override { | |
375 const BatchTracker& mine = m.cast<BatchTracker>(); | |
376 const BatchTracker& theirs = t.cast<BatchTracker>(); | |
377 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, | |
378 that, theirs.fUsesLocalCoords) && | |
379 CanCombineOutput(mine.fInputColorType, mine.fColor, | |
380 theirs.fInputColorType, theirs.fColor); | |
381 } | |
382 | |
383 private: | 352 private: |
384 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) | 353 EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
385 : INHERITED(color, SkMatrix::I(), localMatrix) { | 354 : INHERITED(color, SkMatrix::I(), localMatrix) { |
386 this->initClassID<EllipseEdgeEffect>(); | 355 this->initClassID<EllipseEdgeEffect>(); |
387 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); | 356 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); |
388 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", | 357 fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", |
389 kVec2f_GrVertexAtt
ribType)); | 358 kVec2f_GrVertexAtt
ribType)); |
390 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii", | 359 fInEllipseRadii = &this->addVertexAttrib(Attribute("inEllipseRadii", |
391 kVec4f_GrVertexAttr
ibType)); | 360 kVec4f_GrVertexAttr
ibType)); |
392 fStroke = stroke; | 361 fStroke = stroke; |
393 } | 362 } |
394 | 363 |
395 bool onIsEqual(const GrGeometryProcessor& other) const override { | |
396 const EllipseEdgeEffect& eee = other.cast<EllipseEdgeEffect>(); | |
397 return eee.fStroke == fStroke; | |
398 } | |
399 | |
400 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override
{ | |
401 out->setUnknownSingleComponent(); | |
402 } | |
403 | |
404 struct BatchTracker { | 364 struct BatchTracker { |
405 GrGPInput fInputColorType; | 365 GrGPInput fInputColorType; |
406 GrColor fColor; | 366 GrColor fColor; |
407 bool fUsesLocalCoords; | 367 bool fUsesLocalCoords; |
408 }; | 368 }; |
409 | 369 |
410 const Attribute* fInPosition; | 370 const Attribute* fInPosition; |
411 const Attribute* fInEllipseOffset; | 371 const Attribute* fInEllipseOffset; |
412 const Attribute* fInEllipseRadii; | 372 const Attribute* fInEllipseRadii; |
413 bool fStroke; | 373 bool fStroke; |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 const GrGLSLCaps&) const ov
erride { | 537 const GrGLSLCaps&) const ov
erride { |
578 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 538 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
579 } | 539 } |
580 | 540 |
581 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { | 541 void initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const
override { |
582 BatchTracker* local = bt->cast<BatchTracker>(); | 542 BatchTracker* local = bt->cast<BatchTracker>(); |
583 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); | 543 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
584 local->fUsesLocalCoords = init.fUsesLocalCoords; | 544 local->fUsesLocalCoords = init.fUsesLocalCoords; |
585 } | 545 } |
586 | 546 |
587 bool onCanMakeEqual(const GrBatchTracker& m, | |
588 const GrGeometryProcessor& that, | |
589 const GrBatchTracker& t) const override { | |
590 const BatchTracker& mine = m.cast<BatchTracker>(); | |
591 const BatchTracker& theirs = t.cast<BatchTracker>(); | |
592 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, | |
593 that, theirs.fUsesLocalCoords) && | |
594 CanCombineOutput(mine.fInputColorType, mine.fColor, | |
595 theirs.fInputColorType, theirs.fColor); | |
596 } | |
597 | |
598 private: | 547 private: |
599 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode) | 548 DIEllipseEdgeEffect(GrColor color, const SkMatrix& viewMatrix, Mode mode) |
600 : INHERITED(color, viewMatrix) { | 549 : INHERITED(color, viewMatrix) { |
601 this->initClassID<DIEllipseEdgeEffect>(); | 550 this->initClassID<DIEllipseEdgeEffect>(); |
602 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); | 551 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVe
rtexAttribType)); |
603 fInEllipseOffsets0 = &this->addVertexAttrib(Attribute("inEllipseOffsets0
", | 552 fInEllipseOffsets0 = &this->addVertexAttrib(Attribute("inEllipseOffsets0
", |
604 kVec2f_GrVertexA
ttribType)); | 553 kVec2f_GrVertexA
ttribType)); |
605 fInEllipseOffsets1 = &this->addVertexAttrib(Attribute("inEllipseOffsets1
", | 554 fInEllipseOffsets1 = &this->addVertexAttrib(Attribute("inEllipseOffsets1
", |
606 kVec2f_GrVertexA
ttribType)); | 555 kVec2f_GrVertexA
ttribType)); |
607 fMode = mode; | 556 fMode = mode; |
608 } | 557 } |
609 | 558 |
610 bool onIsEqual(const GrGeometryProcessor& other) const override { | |
611 const DIEllipseEdgeEffect& eee = other.cast<DIEllipseEdgeEffect>(); | |
612 return eee.fMode == fMode; | |
613 } | |
614 | |
615 void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const override
{ | |
616 out->setUnknownSingleComponent(); | |
617 } | |
618 | |
619 struct BatchTracker { | 559 struct BatchTracker { |
620 GrGPInput fInputColorType; | 560 GrGPInput fInputColorType; |
621 GrColor fColor; | 561 GrColor fColor; |
622 bool fUsesLocalCoords; | 562 bool fUsesLocalCoords; |
623 }; | 563 }; |
624 | 564 |
625 const Attribute* fInPosition; | 565 const Attribute* fInPosition; |
626 const Attribute* fInEllipseOffsets0; | 566 const Attribute* fInEllipseOffsets0; |
627 const Attribute* fInEllipseOffsets1; | 567 const Attribute* fInEllipseOffsets1; |
628 Mode fMode; | 568 Mode fMode; |
(...skipping 1489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2118 } | 2058 } |
2119 | 2059 |
2120 BATCH_TEST_DEFINE(RRectBatch) { | 2060 BATCH_TEST_DEFINE(RRectBatch) { |
2121 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); | 2061 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); |
2122 GrColor color = GrRandomColor(random); | 2062 GrColor color = GrRandomColor(random); |
2123 const SkRRect& rrect = GrTest::TestRRectSimple(random); | 2063 const SkRRect& rrect = GrTest::TestRRectSimple(random); |
2124 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); | 2064 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); |
2125 } | 2065 } |
2126 | 2066 |
2127 #endif | 2067 #endif |
OLD | NEW |