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

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

Issue 746423007: Draft change to start pulling uniform color into GP (Closed) Base URL: https://skia.googlesource.com/skia.git@no_factories
Patch Set: rebase Created 6 years 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 | « include/gpu/effects/GrPorterDuffXferProcessor.h ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('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 /* 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
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
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
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 }
OLDNEW
« no previous file with comments | « include/gpu/effects/GrPorterDuffXferProcessor.h ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698