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

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: cleanup 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
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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 523
524 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 524 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
525 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>(); 525 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>();
526 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 526 GrGLGPBuilder* pb = args.fPB;
527 GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
527 528
528 GrGLVertToFrag v(kVec4f_GrSLType); 529 GrGLVertToFrag v(kVec4f_GrSLType);
529 args.fPB->addVarying("QuadEdge", &v); 530 args.fPB->addVarying("QuadEdge", &v);
530 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName ); 531 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName );
531 532
533 const BatchTracker& local = args.fBT.cast<BatchTracker>();
534
535 // Setup pass through color
536 this->setupColor(pb, local.fInputColorType, args.fOutputColor, NULL, &fColorUniform);
537
532 // setup coord outputs 538 // setup coord outputs
533 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i nPosition()->fName); 539 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i nPosition()->fName);
534 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo sition()->fName); 540 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo sition()->fName);
535 541
536 // setup position varying 542 // setup position varying
537 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 543 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(),
538 vsBuilder->uViewM(), qe.inPosition()->fName); 544 vsBuilder->uViewM(), qe.inPosition()->fName);
539 545
540 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 546 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
541 547
(...skipping 13 matching lines...) Expand all
555 " 2.0*%s.x*duvdy.x - duvdy.y);" , 561 " 2.0*%s.x*duvdy.x - duvdy.y);" ,
556 v.fsIn(), v.fsIn()); 562 v.fsIn(), v.fsIn());
557 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(), v.fsIn(), 563 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(), v.fsIn(),
558 v.fsIn()); 564 v.fsIn());
559 fsBuilder->codeAppendf("edgeAlpha = " 565 fsBuilder->codeAppendf("edgeAlpha = "
560 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0 );}"); 566 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0 );}");
561 567
562 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 568 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
563 } 569 }
564 570
565 static inline void GenKey(const GrGeometryProcessor&, 571 static inline void GenKey(const GrGeometryProcessor& gp,
566 const GrBatchTracker&, 572 const GrBatchTracker& bt,
567 const GrGLCaps&, 573 const GrGLCaps&,
568 GrProcessorKeyBuilder*) {} 574 GrProcessorKeyBuilder* b) {
575 const BatchTracker& local = bt.cast<BatchTracker>();
576 b->add32(local.fInputColorType);
577 }
569 578
570 virtual void setData(const GrGLProgramDataManager&, 579 virtual void setData(const GrGLProgramDataManager& pdman,
571 const GrGeometryProcessor&, 580 const GrGeometryProcessor& gp,
572 const GrBatchTracker&) SK_OVERRIDE {} 581 const GrBatchTracker& bt) SK_OVERRIDE {
582 const BatchTracker& local = bt.cast<BatchTracker>();
583 this->setUniformColorIfRequired(pdman, local.fInputColorType, local. fColor,
584 fColorUniform);
585 }
573 586
574 private: 587 private:
588 UniformHandle fColorUniform;
589
575 typedef GrGLGeometryProcessor INHERITED; 590 typedef GrGLGeometryProcessor INHERITED;
576 }; 591 };
577 592
578 virtual void getGLProcessorKey(const GrBatchTracker& bt, 593 virtual void getGLProcessorKey(const GrBatchTracker& bt,
579 const GrGLCaps& caps, 594 const GrGLCaps& caps,
580 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 595 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
581 GLProcessor::GenKey(*this, bt, caps, b); 596 GLProcessor::GenKey(*this, bt, caps, b);
582 } 597 }
583 598
584 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 599 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE {
585 return SkNEW_ARGS(GLProcessor, (*this, bt)); 600 return SkNEW_ARGS(GLProcessor, (*this, bt));
586 } 601 }
587 602
603 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE {
604 BatchTracker* local = bt->cast<BatchTracker>();
605
606 // We will ignore this color unless we have uniform color
607 local->fColor = init.fColor;
608 local->fInputColorType = GetColorInputType(init, false);
609 }
610
611 bool onCanBatch(const GrBatchTracker& l, const GrBatchTracker& r) const SK_O VERRIDE {
612 const BatchTracker& left = l.cast<BatchTracker>();
613 const BatchTracker& right = r.cast<BatchTracker>();
614 return CanCombineOutput(left.fInputColorType, left.fColor,
615 right.fInputColorType, right.fColor);
616 }
617
588 private: 618 private:
589 QuadEdgeEffect(GrColor color) : INHERITED(color) { 619 QuadEdgeEffect(GrColor color) : INHERITED(color) {
590 this->initClassID<QuadEdgeEffect>(); 620 this->initClassID<QuadEdgeEffect>();
591 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 621 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType));
592 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr VertexAttribType)); 622 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr VertexAttribType));
593 } 623 }
594 624
595 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 625 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
596 return true; 626 return true;
597 } 627 }
598 628
599 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 629 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
600 out->setUnknownSingleComponent(); 630 out->setUnknownSingleComponent();
601 } 631 }
602 632
633 struct BatchTracker {
634 GPInput fInputColorType;
635 GrColor fColor;
636 };
637
603 const GrAttribute* fInPosition; 638 const GrAttribute* fInPosition;
604 const GrAttribute* fInQuadEdge; 639 const GrAttribute* fInQuadEdge;
605 640
606 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 641 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
607 642
608 typedef GrGeometryProcessor INHERITED; 643 typedef GrGeometryProcessor INHERITED;
609 }; 644 };
610 645
611 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); 646 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect);
612 647
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 vOffset, // start vertex 748 vOffset, // start vertex
714 0, // start index 749 0, // start index
715 draw.fVertexCnt, 750 draw.fVertexCnt,
716 draw.fIndexCnt, 751 draw.fIndexCnt,
717 &devBounds); 752 &devBounds);
718 vOffset += draw.fVertexCnt; 753 vOffset += draw.fVertexCnt;
719 } 754 }
720 755
721 return true; 756 return true;
722 } 757 }
OLDNEW
« no previous file with comments | « gyp/gpu.gypi ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('j') | src/gpu/GrGeometryProcessor.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698