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->setupColor(pb, local.fInputColorType, args.fOutputColor, NULL,
&fColorUniform); |
| 538 |
532 // setup coord outputs | 539 // setup coord outputs |
533 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i
nPosition()->fName); | 540 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i
nPosition()->fName); |
534 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo
sition()->fName); | 541 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo
sition()->fName); |
535 | 542 |
536 // setup position varying | 543 // setup position varying |
537 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi
on(), | 544 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi
on(), |
538 vsBuilder->uViewM(), qe.inPosition()->fName); | 545 vsBuilder->uViewM(), qe.inPosition()->fName); |
539 | 546 |
540 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); | 547 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde
r(); |
541 | 548 |
(...skipping 13 matching lines...) Expand all Loading... |
555 " 2.0*%s.x*duvdy.x - duvdy.y);"
, | 562 " 2.0*%s.x*duvdy.x - duvdy.y);"
, |
556 v.fsIn(), v.fsIn()); | 563 v.fsIn(), v.fsIn()); |
557 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(),
v.fsIn(), | 564 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(),
v.fsIn(), |
558 v.fsIn()); | 565 v.fsIn()); |
559 fsBuilder->codeAppendf("edgeAlpha = " | 566 fsBuilder->codeAppendf("edgeAlpha = " |
560 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0
);}"); | 567 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0
);}"); |
561 | 568 |
562 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); | 569 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage
); |
563 } | 570 } |
564 | 571 |
565 static inline void GenKey(const GrGeometryProcessor&, | 572 static inline void GenKey(const GrGeometryProcessor& gp, |
566 const GrBatchTracker&, | 573 const GrBatchTracker& bt, |
567 const GrGLCaps&, | 574 const GrGLCaps&, |
568 GrProcessorKeyBuilder*) {} | 575 GrProcessorKeyBuilder* b) { |
| 576 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 577 b->add32(local.fInputColorType); |
| 578 } |
569 | 579 |
570 virtual void setData(const GrGLProgramDataManager&, | 580 virtual void setData(const GrGLProgramDataManager& pdman, |
571 const GrGeometryProcessor&, | 581 const GrGeometryProcessor& gp, |
572 const GrBatchTracker&) SK_OVERRIDE {} | 582 const GrBatchTracker& bt) SK_OVERRIDE { |
| 583 const BatchTracker& local = bt.cast<BatchTracker>(); |
| 584 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f
Color) { |
| 585 GrGLfloat c[4]; |
| 586 GrColorToRGBAFloat(local.fColor, c); |
| 587 pdman.set4fv(fColorUniform, 1, c); |
| 588 fColor = local.fColor; |
| 589 } |
| 590 } |
573 | 591 |
574 private: | 592 private: |
| 593 GrColor fColor; |
| 594 UniformHandle fColorUniform; |
| 595 |
575 typedef GrGLGeometryProcessor INHERITED; | 596 typedef GrGLGeometryProcessor INHERITED; |
576 }; | 597 }; |
577 | 598 |
578 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 599 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
579 const GrGLCaps& caps, | 600 const GrGLCaps& caps, |
580 GrProcessorKeyBuilder* b) const SK_OVERRIDE { | 601 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
581 GLProcessor::GenKey(*this, bt, caps, b); | 602 GLProcessor::GenKey(*this, bt, caps, b); |
582 } | 603 } |
583 | 604 |
584 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { | 605 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst SK_OVERRIDE { |
585 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 606 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
586 } | 607 } |
587 | 608 |
| 609 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR
IDE { |
| 610 BatchTracker* local = bt->cast<BatchTracker>(); |
| 611 local->fInputColorType = GetColorInputType(&local->fColor, this->color()
, init, false); |
| 612 } |
| 613 |
| 614 bool onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker& t) const
SK_OVERRIDE { |
| 615 const BatchTracker& mine = m.cast<BatchTracker>(); |
| 616 const BatchTracker& theirs = t.cast<BatchTracker>(); |
| 617 return CanCombineOutput(mine.fInputColorType, mine.fColor, |
| 618 theirs.fInputColorType, theirs.fColor); |
| 619 } |
| 620 |
588 private: | 621 private: |
589 QuadEdgeEffect(GrColor color) : INHERITED(color) { | 622 QuadEdgeEffect(GrColor color) : INHERITED(color) { |
590 this->initClassID<QuadEdgeEffect>(); | 623 this->initClassID<QuadEdgeEffect>(); |
591 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); | 624 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr
VertexAttribType)); |
592 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); | 625 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr
VertexAttribType)); |
593 } | 626 } |
594 | 627 |
595 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { | 628 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { |
596 return true; | 629 return true; |
597 } | 630 } |
598 | 631 |
599 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { | 632 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const
SK_OVERRIDE { |
600 out->setUnknownSingleComponent(); | 633 out->setUnknownSingleComponent(); |
601 } | 634 } |
602 | 635 |
| 636 struct BatchTracker { |
| 637 GrGPInput fInputColorType; |
| 638 GrColor fColor; |
| 639 }; |
| 640 |
603 const GrAttribute* fInPosition; | 641 const GrAttribute* fInPosition; |
604 const GrAttribute* fInQuadEdge; | 642 const GrAttribute* fInQuadEdge; |
605 | 643 |
606 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; | 644 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
607 | 645 |
608 typedef GrGeometryProcessor INHERITED; | 646 typedef GrGeometryProcessor INHERITED; |
609 }; | 647 }; |
610 | 648 |
611 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); | 649 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); |
612 | 650 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 vOffset, // start vertex | 751 vOffset, // start vertex |
714 0, // start index | 752 0, // start index |
715 draw.fVertexCnt, | 753 draw.fVertexCnt, |
716 draw.fIndexCnt, | 754 draw.fIndexCnt, |
717 &devBounds); | 755 &devBounds); |
718 vOffset += draw.fVertexCnt; | 756 vOffset += draw.fVertexCnt; |
719 } | 757 } |
720 | 758 |
721 return true; | 759 return true; |
722 } | 760 } |
OLD | NEW |