| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrAAConvexPathRenderer.h" | 9 #include "GrAAConvexPathRenderer.h" |
| 10 | 10 |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 virtual ~QuadEdgeEffect() {} | 512 virtual ~QuadEdgeEffect() {} |
| 513 | 513 |
| 514 virtual const char* name() const SK_OVERRIDE { return "QuadEdge"; } | 514 virtual const char* name() const SK_OVERRIDE { return "QuadEdge"; } |
| 515 | 515 |
| 516 const GrAttribute* inPosition() const { return fInPosition; } | 516 const GrAttribute* inPosition() const { return fInPosition; } |
| 517 const GrAttribute* inQuadEdge() const { return fInQuadEdge; } | 517 const GrAttribute* inQuadEdge() const { return fInQuadEdge; } |
| 518 | 518 |
| 519 class GLProcessor : public GrGLGeometryProcessor { | 519 class GLProcessor : public GrGLGeometryProcessor { |
| 520 public: | 520 public: |
| 521 GLProcessor(const GrGeometryProcessor&, | 521 GLProcessor(const GrGeometryProcessor&, |
| 522 const GrBatchTracker&) {} | 522 const GrBatchTracker&) |
| 523 : fColor(GrColor_ILLEGAL) {} |
| 523 | 524 |
| 524 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { | 525 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { |
| 525 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>(); | 526 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>(); |
| 526 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 527 GrGLGPBuilder* pb = args.fPB; |
| 528 GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder(); |
| 527 | 529 |
| 528 GrGLVertToFrag v(kVec4f_GrSLType); | 530 GrGLVertToFrag v(kVec4f_GrSLType); |
| 529 args.fPB->addVarying("QuadEdge", &v); | 531 args.fPB->addVarying("QuadEdge", &v); |
| 530 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName
); | 532 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName
); |
| 531 | 533 |
| 534 const BatchTracker& local = args.fBT.cast<BatchTracker>(); |
| 535 |
| 536 // Setup pass through color |
| 537 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, NULL, |
| 538 &fColorUniform); |
| 539 |
| 532 // setup coord outputs | 540 // setup coord outputs |
| 533 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i
nPosition()->fName); | 541 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i
nPosition()->fName); |
| 534 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo
sition()->fName); | 542 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo
sition()->fName); |
| 535 | 543 |
| 536 // setup position varying | 544 // setup position varying |
| 537 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi
on(), | 545 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi
on(), |
| 538 vsBuilder->uViewM(), qe.inPosition()->fName); | 546 vsBuilder->uViewM(), qe.inPosition()->fName); |
| 539 | 547 |
| 540 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); | 548 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); |
| 541 | 549 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 555 " 2.0*%s.x*duvdy.x - duvdy.y);"
, | 563 " 2.0*%s.x*duvdy.x - duvdy.y);"
, |
| 556 v.fsIn(), v.fsIn()); | 564 v.fsIn(), v.fsIn()); |
| 557 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(),
v.fsIn(), | 565 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(),
v.fsIn(), |
| 558 v.fsIn()); | 566 v.fsIn()); |
| 559 fsBuilder->codeAppendf("edgeAlpha = " | 567 fsBuilder->codeAppendf("edgeAlpha = " |
| 560 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0
);}"); | 568 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0
);}"); |
| 561 | 569 |
| 562 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 570 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
| 563 } | 571 } |
| 564 | 572 |
| 565 static inline void GenKey(const GrGeometryProcessor&, | 573 static inline void GenKey(const GrGeometryProcessor& gp, |
| 566 const GrBatchTracker&, | 574 const GrBatchTracker& bt, |
| 567 const GrGLCaps&, | 575 const GrGLCaps&, |
| 568 GrProcessorKeyBuilder*) {} | 576 GrProcessorKeyBuilder* b) { |
| 577 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 578 b->add32(local.fInputColorType); |
| 579 } |
| 569 | 580 |
| 570 virtual void setData(const GrGLProgramDataManager&, | 581 virtual void setData(const GrGLProgramDataManager& pdman, |
| 571 const GrGeometryProcessor&, | 582 const GrPrimitiveProcessor& gp, |
| 572 const GrBatchTracker&) SK_OVERRIDE {} | 583 const GrBatchTracker& bt) SK_OVERRIDE { |
| 584 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 585 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
| 586 GrGLfloat c[4]; |
| 587 GrColorToRGBAFloat(local.fColor, c); |
| 588 pdman.set4fv(fColorUniform, 1, c); |
| 589 fColor = local.fColor; |
| 590 } |
| 591 } |
| 573 | 592 |
| 574 private: | 593 private: |
| 594 GrColor fColor; |
| 595 UniformHandle fColorUniform; |
| 596 |
| 575 typedef GrGLGeometryProcessor INHERITED; | 597 typedef GrGLGeometryProcessor INHERITED; |
| 576 }; | 598 }; |
| 577 | 599 |
| 578 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 600 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 579 const GrGLCaps& caps, | 601 const GrGLCaps& caps, |
| 580 GrProcessorKeyBuilder* b) const SK_OVERRIDE { | 602 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
| 581 GLProcessor::GenKey(*this, bt, caps, b); | 603 GLProcessor::GenKey(*this, bt, caps, b); |
| 582 } | 604 } |
| 583 | 605 |
| 584 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { | 606 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { |
| 585 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 607 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
| 586 } | 608 } |
| 587 | 609 |
| 610 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE { |
| 611 BatchTracker* local = bt->cast<BatchTracker>(); |
| 612 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
| 613 } |
| 614 |
| 615 bool onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker& t) const
SK_OVERRIDE { |
| 616 const BatchTracker& mine = m.cast<BatchTracker>(); |
| 617 const BatchTracker& theirs = t.cast<BatchTracker>(); |
| 618 return CanCombineOutput(mine.fInputColorType, mine.fColor, |
| 619 theirs.fInputColorType, theirs.fColor); |
| 620 } |
| 621 |
| 588 private: | 622 private: |
| 589 QuadEdgeEffect(GrColor color) : INHERITED(color) { | 623 QuadEdgeEffect(GrColor color) : INHERITED(color) { |
| 590 this->initClassID<QuadEdgeEffect>(); | 624 this->initClassID<QuadEdgeEffect>(); |
| 591 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); | 625 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); |
| 592 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); | 626 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); |
| 593 } | 627 } |
| 594 | 628 |
| 595 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { | 629 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { |
| 596 return true; | 630 return true; |
| 597 } | 631 } |
| 598 | 632 |
| 599 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { | 633 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { |
| 600 out->setUnknownSingleComponent(); | 634 out->setUnknownSingleComponent(); |
| 601 } | 635 } |
| 602 | 636 |
| 637 struct BatchTracker { |
| 638 GrGPInput fInputColorType; |
| 639 GrColor fColor; |
| 640 }; |
| 641 |
| 603 const GrAttribute* fInPosition; | 642 const GrAttribute* fInPosition; |
| 604 const GrAttribute* fInQuadEdge; | 643 const GrAttribute* fInQuadEdge; |
| 605 | 644 |
| 606 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 645 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
| 607 | 646 |
| 608 typedef GrGeometryProcessor INHERITED; | 647 typedef GrGeometryProcessor INHERITED; |
| 609 }; | 648 }; |
| 610 | 649 |
| 611 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); | 650 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); |
| 612 | 651 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 vOffset, // start vertex | 752 vOffset, // start vertex |
| 714 0, // start index | 753 0, // start index |
| 715 draw.fVertexCnt, | 754 draw.fVertexCnt, |
| 716 draw.fIndexCnt, | 755 draw.fIndexCnt, |
| 717 &devBounds); | 756 &devBounds); |
| 718 vOffset += draw.fVertexCnt; | 757 vOffset += draw.fVertexCnt; |
| 719 } | 758 } |
| 720 | 759 |
| 721 return true; | 760 return true; |
| 722 } | 761 } |
| OLD | NEW |