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

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

Issue 571163002: removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: rebase after revert Created 6 years, 3 months 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 "gl/builders/GrGLProgramBuilder.h" 8 #include "gl/builders/GrGLProgramBuilder.h"
9 #include "GrDashingEffect.h" 9 #include "GrDashingEffect.h"
10 10
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 471
472 GR_DECLARE_EFFECT_TEST; 472 GR_DECLARE_EFFECT_TEST;
473 473
474 typedef GrGeometryProcessor INHERITED; 474 typedef GrGeometryProcessor INHERITED;
475 }; 475 };
476 476
477 ////////////////////////////////////////////////////////////////////////////// 477 //////////////////////////////////////////////////////////////////////////////
478 478
479 class GLDashingCircleEffect : public GrGLGeometryProcessor { 479 class GLDashingCircleEffect : public GrGLGeometryProcessor {
480 public: 480 public:
481 GLDashingCircleEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 481 GLDashingCircleEffect(const GrBackendEffectFactory&, const GrEffect&);
482 482
483 virtual void emitCode(GrGLFullProgramBuilder* builder, 483 virtual void emitCode(GrGLFullProgramBuilder* builder,
484 const GrDrawEffect& drawEffect, 484 const GrEffect& effect,
485 const GrEffectKey& key, 485 const GrEffectKey& key,
486 const char* outputColor, 486 const char* outputColor,
487 const char* inputColor, 487 const char* inputColor,
488 const TransformedCoordsArray&, 488 const TransformedCoordsArray&,
489 const TextureSamplerArray&) SK_OVERRIDE; 489 const TextureSamplerArray&) SK_OVERRIDE;
490 490
491 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB uilder*); 491 static inline void GenKey(const GrEffect&, const GrGLCaps&, GrEffectKeyBuild er*);
492 492
493 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 493 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
494 494
495 private: 495 private:
496 GrGLProgramDataManager::UniformHandle fParamUniform; 496 GrGLProgramDataManager::UniformHandle fParamUniform;
497 SkScalar fPrevRadius; 497 SkScalar fPrevRadius;
498 SkScalar fPrevCenterX; 498 SkScalar fPrevCenterX;
499 SkScalar fPrevIntervalLength; 499 SkScalar fPrevIntervalLength;
500 typedef GrGLGeometryProcessor INHERITED; 500 typedef GrGLGeometryProcessor INHERITED;
501 }; 501 };
502 502
503 GLDashingCircleEffect::GLDashingCircleEffect(const GrBackendEffectFactory& facto ry, 503 GLDashingCircleEffect::GLDashingCircleEffect(const GrBackendEffectFactory& facto ry,
504 const GrDrawEffect& drawEffect) 504 const GrEffect& effect)
505 : INHERITED (factory) { 505 : INHERITED (factory) {
506 fPrevRadius = SK_ScalarMin; 506 fPrevRadius = SK_ScalarMin;
507 fPrevCenterX = SK_ScalarMin; 507 fPrevCenterX = SK_ScalarMin;
508 fPrevIntervalLength = SK_ScalarMax; 508 fPrevIntervalLength = SK_ScalarMax;
509 } 509 }
510 510
511 void GLDashingCircleEffect::emitCode(GrGLFullProgramBuilder* builder, 511 void GLDashingCircleEffect::emitCode(GrGLFullProgramBuilder* builder,
512 const GrDrawEffect& drawEffect, 512 const GrEffect& effect,
513 const GrEffectKey& key, 513 const GrEffectKey& key,
514 const char* outputColor, 514 const char* outputColor,
515 const char* inputColor, 515 const char* inputColor,
516 const TransformedCoordsArray&, 516 const TransformedCoordsArray&,
517 const TextureSamplerArray& samplers) { 517 const TextureSamplerArray& samplers) {
518 const DashingCircleEffect& dce = drawEffect.castEffect<DashingCircleEffect>( ); 518 const DashingCircleEffect& dce = effect.cast<DashingCircleEffect>();
519 const char *paramName; 519 const char *paramName;
520 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and 520 // The param uniforms, xyz, refer to circle radius - 0.5, cicles center x co ord, and
521 // the total interval length of the dash. 521 // the total interval length of the dash.
522 fParamUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility , 522 fParamUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility ,
523 kVec3f_GrSLType, 523 kVec3f_GrSLType,
524 "params", 524 "params",
525 &paramName); 525 &paramName);
526 526
527 const char *vsCoordName, *fsCoordName; 527 const char *vsCoordName, *fsCoordName;
528 builder->addVarying(kVec2f_GrSLType, "Coord", &vsCoordName, &fsCoordName); 528 builder->addVarying(kVec2f_GrSLType, "Coord", &vsCoordName, &fsCoordName);
(...skipping 13 matching lines...) Expand all
542 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n"); 542 fsBuilder->codeAppend("\t\tdiff = 1.0 - diff;\n");
543 fsBuilder->codeAppend("\t\tfloat alpha = clamp(diff, 0.0, 1.0);\n"); 543 fsBuilder->codeAppend("\t\tfloat alpha = clamp(diff, 0.0, 1.0);\n");
544 } else { 544 } else {
545 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n"); 545 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n");
546 fsBuilder->codeAppendf("\t\talpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;\n", paramName); 546 fsBuilder->codeAppendf("\t\talpha *= dist < %s.x + 0.5 ? 1.0 : 0.0;\n", paramName);
547 } 547 }
548 fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor, 548 fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor,
549 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_st r()); 549 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_st r());
550 } 550 }
551 551
552 void GLDashingCircleEffect::setData(const GrGLProgramDataManager& pdman, const G rDrawEffect& drawEffect) { 552 void GLDashingCircleEffect::setData(const GrGLProgramDataManager& pdman, const G rEffect& effect) {
553 const DashingCircleEffect& dce = drawEffect.castEffect<DashingCircleEffect>( ); 553 const DashingCircleEffect& dce = effect.cast<DashingCircleEffect>();
554 SkScalar radius = dce.getRadius(); 554 SkScalar radius = dce.getRadius();
555 SkScalar centerX = dce.getCenterX(); 555 SkScalar centerX = dce.getCenterX();
556 SkScalar intervalLength = dce.getIntervalLength(); 556 SkScalar intervalLength = dce.getIntervalLength();
557 if (radius != fPrevRadius || centerX != fPrevCenterX || intervalLength != fP revIntervalLength) { 557 if (radius != fPrevRadius || centerX != fPrevCenterX || intervalLength != fP revIntervalLength) {
558 pdman.set3f(fParamUniform, radius - 0.5f, centerX, intervalLength); 558 pdman.set3f(fParamUniform, radius - 0.5f, centerX, intervalLength);
559 fPrevRadius = radius; 559 fPrevRadius = radius;
560 fPrevCenterX = centerX; 560 fPrevCenterX = centerX;
561 fPrevIntervalLength = intervalLength; 561 fPrevIntervalLength = intervalLength;
562 } 562 }
563 } 563 }
564 564
565 void GLDashingCircleEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCap s&, 565 void GLDashingCircleEffect::GenKey(const GrEffect& effect, const GrGLCaps&,
566 GrEffectKeyBuilder* b) { 566 GrEffectKeyBuilder* b) {
567 const DashingCircleEffect& dce = drawEffect.castEffect<DashingCircleEffect>( ); 567 const DashingCircleEffect& dce = effect.cast<DashingCircleEffect>();
568 b->add32(dce.getEdgeType()); 568 b->add32(dce.getEdgeType());
569 } 569 }
570 570
571 ////////////////////////////////////////////////////////////////////////////// 571 //////////////////////////////////////////////////////////////////////////////
572 572
573 GrEffect* DashingCircleEffect::Create(GrEffectEdgeType edgeType, const DashInfo& info, 573 GrEffect* DashingCircleEffect::Create(GrEffectEdgeType edgeType, const DashInfo& info,
574 SkScalar radius) { 574 SkScalar radius) {
575 if (info.fCount != 2 || info.fIntervals[0] != 0) { 575 if (info.fCount != 2 || info.fIntervals[0] != 0) {
576 return NULL; 576 return NULL;
577 } 577 }
(...skipping 18 matching lines...) Expand all
596 kVec2f_GrSLType, 596 kVec2f_GrSLType,
597 GrShaderVar::kAttribute_TypeMod ifier))) { 597 GrShaderVar::kAttribute_TypeMod ifier))) {
598 SkScalar onLen = info.fIntervals[0]; 598 SkScalar onLen = info.fIntervals[0];
599 SkScalar offLen = info.fIntervals[1]; 599 SkScalar offLen = info.fIntervals[1];
600 fIntervalLength = onLen + offLen; 600 fIntervalLength = onLen + offLen;
601 fRadius = radius; 601 fRadius = radius;
602 fCenterX = SkScalarHalf(offLen); 602 fCenterX = SkScalarHalf(offLen);
603 } 603 }
604 604
605 bool DashingCircleEffect::onIsEqual(const GrEffect& other) const { 605 bool DashingCircleEffect::onIsEqual(const GrEffect& other) const {
606 const DashingCircleEffect& dce = CastEffect<DashingCircleEffect>(other); 606 const DashingCircleEffect& dce = other.cast<DashingCircleEffect>();
607 return (fEdgeType == dce.fEdgeType && 607 return (fEdgeType == dce.fEdgeType &&
608 fIntervalLength == dce.fIntervalLength && 608 fIntervalLength == dce.fIntervalLength &&
609 fRadius == dce.fRadius && 609 fRadius == dce.fRadius &&
610 fCenterX == dce.fCenterX); 610 fCenterX == dce.fCenterX);
611 } 611 }
612 612
613 GR_DEFINE_EFFECT_TEST(DashingCircleEffect); 613 GR_DEFINE_EFFECT_TEST(DashingCircleEffect);
614 614
615 GrEffect* DashingCircleEffect::TestCreate(SkRandom* random, 615 GrEffect* DashingCircleEffect::TestCreate(SkRandom* random,
616 GrContext*, 616 GrContext*,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 681
682 GR_DECLARE_EFFECT_TEST; 682 GR_DECLARE_EFFECT_TEST;
683 683
684 typedef GrGeometryProcessor INHERITED; 684 typedef GrGeometryProcessor INHERITED;
685 }; 685 };
686 686
687 ////////////////////////////////////////////////////////////////////////////// 687 //////////////////////////////////////////////////////////////////////////////
688 688
689 class GLDashingLineEffect : public GrGLGeometryProcessor { 689 class GLDashingLineEffect : public GrGLGeometryProcessor {
690 public: 690 public:
691 GLDashingLineEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 691 GLDashingLineEffect(const GrBackendEffectFactory&, const GrEffect&);
692 692
693 virtual void emitCode(GrGLFullProgramBuilder* builder, 693 virtual void emitCode(GrGLFullProgramBuilder* builder,
694 const GrDrawEffect& drawEffect, 694 const GrEffect& effect,
695 const GrEffectKey& key, 695 const GrEffectKey& key,
696 const char* outputColor, 696 const char* outputColor,
697 const char* inputColor, 697 const char* inputColor,
698 const TransformedCoordsArray&, 698 const TransformedCoordsArray&,
699 const TextureSamplerArray&) SK_OVERRIDE; 699 const TextureSamplerArray&) SK_OVERRIDE;
700 700
701 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB uilder*); 701 static inline void GenKey(const GrEffect&, const GrGLCaps&, GrEffectKeyBuild er*);
702 702
703 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 703 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
704 704
705 private: 705 private:
706 GrGLProgramDataManager::UniformHandle fRectUniform; 706 GrGLProgramDataManager::UniformHandle fRectUniform;
707 GrGLProgramDataManager::UniformHandle fIntervalUniform; 707 GrGLProgramDataManager::UniformHandle fIntervalUniform;
708 SkRect fPrevRect; 708 SkRect fPrevRect;
709 SkScalar fPrevIntervalLength; 709 SkScalar fPrevIntervalLength;
710 typedef GrGLGeometryProcessor INHERITED; 710 typedef GrGLGeometryProcessor INHERITED;
711 }; 711 };
712 712
713 GLDashingLineEffect::GLDashingLineEffect(const GrBackendEffectFactory& factory, 713 GLDashingLineEffect::GLDashingLineEffect(const GrBackendEffectFactory& factory,
714 const GrDrawEffect& drawEffect) 714 const GrEffect& effect)
715 : INHERITED (factory) { 715 : INHERITED (factory) {
716 fPrevRect.fLeft = SK_ScalarNaN; 716 fPrevRect.fLeft = SK_ScalarNaN;
717 fPrevIntervalLength = SK_ScalarMax; 717 fPrevIntervalLength = SK_ScalarMax;
718 } 718 }
719 719
720 void GLDashingLineEffect::emitCode(GrGLFullProgramBuilder* builder, 720 void GLDashingLineEffect::emitCode(GrGLFullProgramBuilder* builder,
721 const GrDrawEffect& drawEffect, 721 const GrEffect& effect,
722 const GrEffectKey& key, 722 const GrEffectKey& key,
723 const char* outputColor, 723 const char* outputColor,
724 const char* inputColor, 724 const char* inputColor,
725 const TransformedCoordsArray&, 725 const TransformedCoordsArray&,
726 const TextureSamplerArray& samplers) { 726 const TextureSamplerArray& samplers) {
727 const DashingLineEffect& de = drawEffect.castEffect<DashingLineEffect>(); 727 const DashingLineEffect& de = effect.cast<DashingLineEffect>();
728 const char *rectName; 728 const char *rectName;
729 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5), 729 // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bot tom - 0.5),
730 // respectively. 730 // respectively.
731 fRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 731 fRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
732 kVec4f_GrSLType, 732 kVec4f_GrSLType,
733 "rect", 733 "rect",
734 &rectName); 734 &rectName);
735 const char *intervalName; 735 const char *intervalName;
736 // The interval uniform's refers to the total length of the interval (on + o ff) 736 // The interval uniform's refers to the total length of the interval (on + o ff)
737 fIntervalUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity, 737 fIntervalUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity,
(...skipping 25 matching lines...) Expand all
763 } else { 763 } else {
764 // Assuming the bounding geometry is tight so no need to check y values 764 // Assuming the bounding geometry is tight so no need to check y values
765 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n"); 765 fsBuilder->codeAppendf("\t\tfloat alpha = 1.0;\n");
766 fsBuilder->codeAppendf("\t\talpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1.0 : 0.0;\n", rectName); 766 fsBuilder->codeAppendf("\t\talpha *= (fragPosShifted.x - %s.x) > -0.5 ? 1.0 : 0.0;\n", rectName);
767 fsBuilder->codeAppendf("\t\talpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1.0 : 0.0;\n", rectName); 767 fsBuilder->codeAppendf("\t\talpha *= (%s.z - fragPosShifted.x) >= -0.5 ? 1.0 : 0.0;\n", rectName);
768 } 768 }
769 fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor, 769 fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor,
770 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_st r()); 770 (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_st r());
771 } 771 }
772 772
773 void GLDashingLineEffect::setData(const GrGLProgramDataManager& pdman, const GrD rawEffect& drawEffect) { 773 void GLDashingLineEffect::setData(const GrGLProgramDataManager& pdman, const GrE ffect& effect) {
774 const DashingLineEffect& de = drawEffect.castEffect<DashingLineEffect>(); 774 const DashingLineEffect& de = effect.cast<DashingLineEffect>();
775 const SkRect& rect = de.getRect(); 775 const SkRect& rect = de.getRect();
776 SkScalar intervalLength = de.getIntervalLength(); 776 SkScalar intervalLength = de.getIntervalLength();
777 if (rect != fPrevRect || intervalLength != fPrevIntervalLength) { 777 if (rect != fPrevRect || intervalLength != fPrevIntervalLength) {
778 pdman.set4f(fRectUniform, rect.fLeft + 0.5f, rect.fTop + 0.5f, 778 pdman.set4f(fRectUniform, rect.fLeft + 0.5f, rect.fTop + 0.5f,
779 rect.fRight - 0.5f, rect.fBottom - 0.5f); 779 rect.fRight - 0.5f, rect.fBottom - 0.5f);
780 pdman.set1f(fIntervalUniform, intervalLength); 780 pdman.set1f(fIntervalUniform, intervalLength);
781 fPrevRect = rect; 781 fPrevRect = rect;
782 fPrevIntervalLength = intervalLength; 782 fPrevIntervalLength = intervalLength;
783 } 783 }
784 } 784 }
785 785
786 void GLDashingLineEffect::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps& , 786 void GLDashingLineEffect::GenKey(const GrEffect& effect, const GrGLCaps&,
787 GrEffectKeyBuilder* b) { 787 GrEffectKeyBuilder* b) {
788 const DashingLineEffect& de = drawEffect.castEffect<DashingLineEffect>(); 788 const DashingLineEffect& de = effect.cast<DashingLineEffect>();
789 b->add32(de.getEdgeType()); 789 b->add32(de.getEdgeType());
790 } 790 }
791 791
792 ////////////////////////////////////////////////////////////////////////////// 792 //////////////////////////////////////////////////////////////////////////////
793 793
794 GrEffect* DashingLineEffect::Create(GrEffectEdgeType edgeType, const DashInfo& i nfo, 794 GrEffect* DashingLineEffect::Create(GrEffectEdgeType edgeType, const DashInfo& i nfo,
795 SkScalar strokeWidth) { 795 SkScalar strokeWidth) {
796 if (info.fCount != 2) { 796 if (info.fCount != 2) {
797 return NULL; 797 return NULL;
798 } 798 }
(...skipping 19 matching lines...) Expand all
818 GrShaderVar::kAttribute_TypeMod ifier))) { 818 GrShaderVar::kAttribute_TypeMod ifier))) {
819 SkScalar onLen = info.fIntervals[0]; 819 SkScalar onLen = info.fIntervals[0];
820 SkScalar offLen = info.fIntervals[1]; 820 SkScalar offLen = info.fIntervals[1];
821 SkScalar halfOffLen = SkScalarHalf(offLen); 821 SkScalar halfOffLen = SkScalarHalf(offLen);
822 SkScalar halfStroke = SkScalarHalf(strokeWidth); 822 SkScalar halfStroke = SkScalarHalf(strokeWidth);
823 fIntervalLength = onLen + offLen; 823 fIntervalLength = onLen + offLen;
824 fRect.set(halfOffLen, -halfStroke, halfOffLen + onLen, halfStroke); 824 fRect.set(halfOffLen, -halfStroke, halfOffLen + onLen, halfStroke);
825 } 825 }
826 826
827 bool DashingLineEffect::onIsEqual(const GrEffect& other) const { 827 bool DashingLineEffect::onIsEqual(const GrEffect& other) const {
828 const DashingLineEffect& de = CastEffect<DashingLineEffect>(other); 828 const DashingLineEffect& de = other.cast<DashingLineEffect>();
829 return (fEdgeType == de.fEdgeType && 829 return (fEdgeType == de.fEdgeType &&
830 fRect == de.fRect && 830 fRect == de.fRect &&
831 fIntervalLength == de.fIntervalLength); 831 fIntervalLength == de.fIntervalLength);
832 } 832 }
833 833
834 GR_DEFINE_EFFECT_TEST(DashingLineEffect); 834 GR_DEFINE_EFFECT_TEST(DashingLineEffect);
835 835
836 GrEffect* DashingLineEffect::TestCreate(SkRandom* random, 836 GrEffect* DashingLineEffect::TestCreate(SkRandom* random,
837 GrContext*, 837 GrContext*,
838 const GrDrawTargetCaps& caps, 838 const GrDrawTargetCaps& caps,
(...skipping 21 matching lines...) Expand all
860 switch (cap) { 860 switch (cap) {
861 case GrDashingEffect::kRound_DashCap: 861 case GrDashingEffect::kRound_DashCap:
862 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth)); 862 return DashingCircleEffect::Create(edgeType, info, SkScalarHalf(stro keWidth));
863 case GrDashingEffect::kNonRound_DashCap: 863 case GrDashingEffect::kNonRound_DashCap:
864 return DashingLineEffect::Create(edgeType, info, strokeWidth); 864 return DashingLineEffect::Create(edgeType, info, strokeWidth);
865 default: 865 default:
866 SkFAIL("Unexpected dashed cap."); 866 SkFAIL("Unexpected dashed cap.");
867 } 867 }
868 return NULL; 868 return NULL;
869 } 869 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrCustomCoordsTextureEffect.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698