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

Side by Side Diff: src/gpu/effects/GrDashingEffect.cpp

Issue 778453002: Remove backend factories (Closed) Base URL: https://skia.googlesource.com/skia.git@unichoice
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 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "GrDashingEffect.h" 8 #include "GrDashingEffect.h"
9 9
10 #include "../GrAARectRenderer.h" 10 #include "../GrAARectRenderer.h"
11 11
12 #include "GrGeometryProcessor.h" 12 #include "GrGeometryProcessor.h"
13 #include "GrContext.h" 13 #include "GrContext.h"
14 #include "GrCoordTransform.h" 14 #include "GrCoordTransform.h"
15 #include "GrDefaultGeoProcFactory.h" 15 #include "GrDefaultGeoProcFactory.h"
16 #include "GrDrawTarget.h" 16 #include "GrDrawTarget.h"
17 #include "GrDrawTargetCaps.h" 17 #include "GrDrawTargetCaps.h"
18 #include "GrInvariantOutput.h" 18 #include "GrInvariantOutput.h"
19 #include "GrProcessor.h" 19 #include "GrProcessor.h"
20 #include "GrStrokeInfo.h" 20 #include "GrStrokeInfo.h"
21 #include "GrTBackendProcessorFactory.h"
22 #include "SkGr.h" 21 #include "SkGr.h"
23 #include "gl/GrGLGeometryProcessor.h" 22 #include "gl/GrGLGeometryProcessor.h"
24 #include "gl/GrGLProcessor.h" 23 #include "gl/GrGLProcessor.h"
25 #include "gl/GrGLSL.h" 24 #include "gl/GrGLSL.h"
26 #include "gl/builders/GrGLProgramBuilder.h" 25 #include "gl/builders/GrGLProgramBuilder.h"
27 26
28 /////////////////////////////////////////////////////////////////////////////// 27 ///////////////////////////////////////////////////////////////////////////////
29 28
30 // Returns whether or not the gpu can fast path the dash line effect. 29 // Returns whether or not the gpu can fast path the dash line effect.
31 static bool can_fast_path_dash(const SkPoint pts[2], const GrStrokeInfo& strokeI nfo, 30 static bool can_fast_path_dash(const SkPoint pts[2], const GrStrokeInfo& strokeI nfo,
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 class DashingCircleEffect : public GrGeometryProcessor { 455 class DashingCircleEffect : public GrGeometryProcessor {
457 public: 456 public:
458 typedef SkPathEffect::DashInfo DashInfo; 457 typedef SkPathEffect::DashInfo DashInfo;
459 458
460 static GrGeometryProcessor* Create(GrPrimitiveEdgeType edgeType, 459 static GrGeometryProcessor* Create(GrPrimitiveEdgeType edgeType,
461 const DashInfo& info, 460 const DashInfo& info,
462 SkScalar radius); 461 SkScalar radius);
463 462
464 virtual ~DashingCircleEffect(); 463 virtual ~DashingCircleEffect();
465 464
466 static const char* Name() { return "DashingCircleEffect"; } 465 virtual const char* name() const SK_OVERRIDE { return "DashingCircleEffect"; }
467 466
468 const GrAttribute* inPosition() const { return fInPosition; } 467 const GrAttribute* inPosition() const { return fInPosition; }
469 468
470 const GrAttribute* inCoord() const { return fInCoord; } 469 const GrAttribute* inCoord() const { return fInCoord; }
471 470
472 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 471 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
473 472
474 SkScalar getRadius() const { return fRadius; } 473 SkScalar getRadius() const { return fRadius; }
475 474
476 SkScalar getCenterX() const { return fCenterX; } 475 SkScalar getCenterX() const { return fCenterX; }
477 476
478 SkScalar getIntervalLength() const { return fIntervalLength; } 477 SkScalar getIntervalLength() const { return fIntervalLength; }
479 478
480 typedef GLDashingCircleEffect GLProcessor; 479 virtual void getGLProcessorKey(const GrBatchTracker&,
480 const GrGLCaps&,
481 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
481 482
482 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE; 483 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker&) const SK_OVERRIDE;
484
485 virtual uint32_t classID() const {
486 static uint32_t id = GenClassID();
487 return id;
488 }
483 489
484 private: 490 private:
485 DashingCircleEffect(GrPrimitiveEdgeType edgeType, const DashInfo& info, SkSc alar radius); 491 DashingCircleEffect(GrPrimitiveEdgeType edgeType, const DashInfo& info, SkSc alar radius);
486 492
487 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 493 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
488 494
489 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 495 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
490 496
491 GrPrimitiveEdgeType fEdgeType; 497 GrPrimitiveEdgeType fEdgeType;
492 const GrAttribute* fInPosition; 498 const GrAttribute* fInPosition;
493 const GrAttribute* fInCoord; 499 const GrAttribute* fInCoord;
494 SkScalar fIntervalLength; 500 SkScalar fIntervalLength;
495 SkScalar fRadius; 501 SkScalar fRadius;
496 SkScalar fCenterX; 502 SkScalar fCenterX;
497 503
498 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 504 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
499 505
500 typedef GrGeometryProcessor INHERITED; 506 typedef GrGeometryProcessor INHERITED;
501 }; 507 };
502 508
503 ////////////////////////////////////////////////////////////////////////////// 509 //////////////////////////////////////////////////////////////////////////////
504 510
505 class GLDashingCircleEffect : public GrGLGeometryProcessor { 511 class GLDashingCircleEffect : public GrGLGeometryProcessor {
506 public: 512 public:
507 GLDashingCircleEffect(const GrBackendProcessorFactory&, 513 GLDashingCircleEffect(const GrGeometryProcessor&, const GrBatchTracker&);
508 const GrGeometryProcessor&,
509 const GrBatchTracker&);
510 514
511 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 515 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
512 516
513 static inline void GenKey(const GrGeometryProcessor&, 517 static inline void GenKey(const GrGeometryProcessor&,
514 const GrBatchTracker&, 518 const GrBatchTracker&,
515 const GrGLCaps&, 519 const GrGLCaps&,
516 GrProcessorKeyBuilder*); 520 GrProcessorKeyBuilder*);
517 521
518 virtual void setData(const GrGLProgramDataManager&, 522 virtual void setData(const GrGLProgramDataManager&,
519 const GrGeometryProcessor&, 523 const GrGeometryProcessor&,
520 const GrBatchTracker&) SK_OVERRIDE; 524 const GrBatchTracker&) SK_OVERRIDE;
521 525
522 private: 526 private:
523 GrGLProgramDataManager::UniformHandle fParamUniform; 527 GrGLProgramDataManager::UniformHandle fParamUniform;
524 SkScalar fPrevRadius; 528 SkScalar fPrevRadius;
525 SkScalar fPrevCenterX; 529 SkScalar fPrevCenterX;
526 SkScalar fPrevIntervalLength; 530 SkScalar fPrevIntervalLength;
527 typedef GrGLGeometryProcessor INHERITED; 531 typedef GrGLGeometryProcessor INHERITED;
528 }; 532 };
529 533
530 GLDashingCircleEffect::GLDashingCircleEffect(const GrBackendProcessorFactory& fa ctory, 534 GLDashingCircleEffect::GLDashingCircleEffect(const GrGeometryProcessor&,
531 const GrGeometryProcessor&, 535 const GrBatchTracker&) {
532 const GrBatchTracker&)
533 : INHERITED (factory) {
534 fPrevRadius = SK_ScalarMin; 536 fPrevRadius = SK_ScalarMin;
535 fPrevCenterX = SK_ScalarMin; 537 fPrevCenterX = SK_ScalarMin;
536 fPrevIntervalLength = SK_ScalarMax; 538 fPrevIntervalLength = SK_ScalarMax;
537 } 539 }
538 540
539 void GLDashingCircleEffect::emitCode(const EmitArgs& args) { 541 void GLDashingCircleEffect::emitCode(const EmitArgs& args) {
540 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>(); 542 const DashingCircleEffect& dce = args.fGP.cast<DashingCircleEffect>();
541 const char *paramName; 543 const char *paramName;
542 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and 544 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and
543 // the total interval length of the dash. 545 // the total interval length of the dash.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 613
612 return SkNEW_ARGS(DashingCircleEffect, (edgeType, info, radius)); 614 return SkNEW_ARGS(DashingCircleEffect, (edgeType, info, radius));
613 } 615 }
614 616
615 DashingCircleEffect::~DashingCircleEffect() {} 617 DashingCircleEffect::~DashingCircleEffect() {}
616 618
617 void DashingCircleEffect::onComputeInvariantOutput(GrInvariantOutput* inout) con st { 619 void DashingCircleEffect::onComputeInvariantOutput(GrInvariantOutput* inout) con st {
618 inout->mulByUnknownAlpha(); 620 inout->mulByUnknownAlpha();
619 } 621 }
620 622
621 const GrBackendGeometryProcessorFactory& DashingCircleEffect::getFactory() const { 623 void DashingCircleEffect::getGLProcessorKey(const GrBatchTracker& bt,
622 return GrTBackendGeometryProcessorFactory<DashingCircleEffect>::getInstance( ); 624 const GrGLCaps& caps,
625 GrProcessorKeyBuilder* b) const {
626 GLDashingCircleEffect::GenKey(*this, bt, caps, b);
627 }
628
629 GrGLGeometryProcessor* DashingCircleEffect::createGLInstance(const GrBatchTracke r& bt) const {
630 return SkNEW_ARGS(GLDashingCircleEffect, (*this, bt));
623 } 631 }
624 632
625 DashingCircleEffect::DashingCircleEffect(GrPrimitiveEdgeType edgeType, const Das hInfo& info, 633 DashingCircleEffect::DashingCircleEffect(GrPrimitiveEdgeType edgeType, const Das hInfo& info,
626 SkScalar radius) 634 SkScalar radius)
627 : fEdgeType(edgeType) { 635 : fEdgeType(edgeType) {
628 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType)); 636 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
629 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr ibType)); 637 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr ibType));
630 SkScalar onLen = info.fIntervals[0]; 638 SkScalar onLen = info.fIntervals[0];
631 SkScalar offLen = info.fIntervals[1]; 639 SkScalar offLen = info.fIntervals[1];
632 fIntervalLength = onLen + offLen; 640 fIntervalLength = onLen + offLen;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 class DashingLineEffect : public GrGeometryProcessor { 686 class DashingLineEffect : public GrGeometryProcessor {
679 public: 687 public:
680 typedef SkPathEffect::DashInfo DashInfo; 688 typedef SkPathEffect::DashInfo DashInfo;
681 689
682 static GrGeometryProcessor* Create(GrPrimitiveEdgeType edgeType, 690 static GrGeometryProcessor* Create(GrPrimitiveEdgeType edgeType,
683 const DashInfo& info, 691 const DashInfo& info,
684 SkScalar strokeWidth); 692 SkScalar strokeWidth);
685 693
686 virtual ~DashingLineEffect(); 694 virtual ~DashingLineEffect();
687 695
688 static const char* Name() { return "DashingEffect"; } 696 virtual const char* name() const SK_OVERRIDE { return "DashingEffect"; }
689 697
690 const GrAttribute* inPosition() const { return fInPosition; } 698 const GrAttribute* inPosition() const { return fInPosition; }
691 699
692 const GrAttribute* inCoord() const { return fInCoord; } 700 const GrAttribute* inCoord() const { return fInCoord; }
693 701
694 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 702 GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
695 703
696 const SkRect& getRect() const { return fRect; } 704 const SkRect& getRect() const { return fRect; }
697 705
698 SkScalar getIntervalLength() const { return fIntervalLength; } 706 SkScalar getIntervalLength() const { return fIntervalLength; }
699 707
700 typedef GLDashingLineEffect GLProcessor; 708 virtual void getGLProcessorKey(const GrBatchTracker& bt,
709 const GrGLCaps& caps,
710 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
701 711
702 virtual const GrBackendGeometryProcessorFactory& getFactory() const SK_OVERR IDE; 712 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
713
714 virtual uint32_t classID() const {
715 static uint32_t id = GenClassID();
716 return id;
717 }
703 718
704 private: 719 private:
705 DashingLineEffect(GrPrimitiveEdgeType edgeType, const DashInfo& info, SkScal ar strokeWidth); 720 DashingLineEffect(GrPrimitiveEdgeType edgeType, const DashInfo& info, SkScal ar strokeWidth);
706 721
707 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 722 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
708 723
709 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 724 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
710 725
711 GrPrimitiveEdgeType fEdgeType; 726 GrPrimitiveEdgeType fEdgeType;
712 const GrAttribute* fInPosition; 727 const GrAttribute* fInPosition;
713 const GrAttribute* fInCoord; 728 const GrAttribute* fInCoord;
714 SkRect fRect; 729 SkRect fRect;
715 SkScalar fIntervalLength; 730 SkScalar fIntervalLength;
716 731
717 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 732 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
718 733
719 typedef GrGeometryProcessor INHERITED; 734 typedef GrGeometryProcessor INHERITED;
720 }; 735 };
721 736
722 ////////////////////////////////////////////////////////////////////////////// 737 //////////////////////////////////////////////////////////////////////////////
723 738
724 class GLDashingLineEffect : public GrGLGeometryProcessor { 739 class GLDashingLineEffect : public GrGLGeometryProcessor {
725 public: 740 public:
726 GLDashingLineEffect(const GrBackendProcessorFactory&, 741 GLDashingLineEffect(const GrGeometryProcessor&, const GrBatchTracker&);
727 const GrGeometryProcessor&,
728 const GrBatchTracker&);
729 742
730 virtual void emitCode(const EmitArgs&) SK_OVERRIDE; 743 virtual void emitCode(const EmitArgs&) SK_OVERRIDE;
731 744
732 static inline void GenKey(const GrGeometryProcessor&, 745 static inline void GenKey(const GrGeometryProcessor&,
733 const GrBatchTracker&, 746 const GrBatchTracker&,
734 const GrGLCaps&, 747 const GrGLCaps&,
735 GrProcessorKeyBuilder*); 748 GrProcessorKeyBuilder*);
736 749
737 virtual void setData(const GrGLProgramDataManager&, 750 virtual void setData(const GrGLProgramDataManager&,
738 const GrGeometryProcessor&, 751 const GrGeometryProcessor&,
739 const GrBatchTracker&) SK_OVERRIDE; 752 const GrBatchTracker&) SK_OVERRIDE;
740 753
741 private: 754 private:
742 GrGLProgramDataManager::UniformHandle fRectUniform; 755 GrGLProgramDataManager::UniformHandle fRectUniform;
743 GrGLProgramDataManager::UniformHandle fIntervalUniform; 756 GrGLProgramDataManager::UniformHandle fIntervalUniform;
744 SkRect fPrevRect; 757 SkRect fPrevRect;
745 SkScalar fPrevIntervalLength; 758 SkScalar fPrevIntervalLength;
746 typedef GrGLGeometryProcessor INHERITED; 759 typedef GrGLGeometryProcessor INHERITED;
747 }; 760 };
748 761
749 GLDashingLineEffect::GLDashingLineEffect(const GrBackendProcessorFactory& factor y, 762 GLDashingLineEffect::GLDashingLineEffect(const GrGeometryProcessor&,
750 const GrGeometryProcessor&, 763 const GrBatchTracker&) {
751 const GrBatchTracker&)
752 : INHERITED (factory) {
753 fPrevRect.fLeft = SK_ScalarNaN; 764 fPrevRect.fLeft = SK_ScalarNaN;
754 fPrevIntervalLength = SK_ScalarMax; 765 fPrevIntervalLength = SK_ScalarMax;
755 } 766 }
756 767
757 void GLDashingLineEffect::emitCode(const EmitArgs& args) { 768 void GLDashingLineEffect::emitCode(const EmitArgs& args) {
758 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>(); 769 const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>();
759 const char *rectName; 770 const char *rectName;
760 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5), 771 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5),
761 // respectively. 772 // respectively.
762 fRectUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility , 773 fRectUniform = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility ,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 855
845 return SkNEW_ARGS(DashingLineEffect, (edgeType, info, strokeWidth)); 856 return SkNEW_ARGS(DashingLineEffect, (edgeType, info, strokeWidth));
846 } 857 }
847 858
848 DashingLineEffect::~DashingLineEffect() {} 859 DashingLineEffect::~DashingLineEffect() {}
849 860
850 void DashingLineEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const { 861 void DashingLineEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const {
851 inout->mulByUnknownAlpha(); 862 inout->mulByUnknownAlpha();
852 } 863 }
853 864
854 const GrBackendGeometryProcessorFactory& DashingLineEffect::getFactory() const { 865 void DashingLineEffect::getGLProcessorKey(const GrBatchTracker& bt,
855 return GrTBackendGeometryProcessorFactory<DashingLineEffect>::getInstance(); 866 const GrGLCaps& caps,
867 GrProcessorKeyBuilder* b) const {
868 GLDashingLineEffect::GenKey(*this, bt, caps, b);
869 }
870
871 GrGLGeometryProcessor* DashingLineEffect::createGLInstance(const GrBatchTracker& bt) const {
872 return SkNEW_ARGS(GLDashingLineEffect, (*this, bt));
856 } 873 }
857 874
858 DashingLineEffect::DashingLineEffect(GrPrimitiveEdgeType edgeType, const DashInf o& info, 875 DashingLineEffect::DashingLineEffect(GrPrimitiveEdgeType edgeType, const DashInf o& info,
859 SkScalar strokeWidth) 876 SkScalar strokeWidth)
860 : fEdgeType(edgeType) { 877 : fEdgeType(edgeType) {
861 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType)); 878 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
862 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr ibType)); 879 fInCoord = &this->addVertexAttrib(GrAttribute("inCoord", kVec2f_GrVertexAttr ibType));
863 SkScalar onLen = info.fIntervals[0]; 880 SkScalar onLen = info.fIntervals[0];
864 SkScalar offLen = info.fIntervals[1]; 881 SkScalar offLen = info.fIntervals[1];
865 SkScalar halfOffLen = SkScalarHalf(offLen); 882 SkScalar halfOffLen = SkScalarHalf(offLen);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 switch (cap) { 921 switch (cap) {
905 case GrDashingEffect::kRound_DashCap: 922 case GrDashingEffect::kRound_DashCap:
906 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth)); 923 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth));
907 case GrDashingEffect::kNonRound_DashCap: 924 case GrDashingEffect::kNonRound_DashCap:
908 return DashingLineEffect::Create(edgeType, info, strokeWidth); 925 return DashingLineEffect::Create(edgeType, info, strokeWidth);
909 default: 926 default:
910 SkFAIL("Unexpected dashed cap."); 927 SkFAIL("Unexpected dashed cap.");
911 } 928 }
912 return NULL; 929 return NULL;
913 } 930 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698