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

Side by Side Diff: src/effects/SkBlurMaskFilter.cpp

Issue 577593003: Revert of removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: 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
« no previous file with comments | « src/effects/SkArithmeticMode.cpp ('k') | src/effects/SkColorFilters.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 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
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 "SkBlurMaskFilter.h" 9 #include "SkBlurMaskFilter.h"
10 #include "SkBlurMask.h" 10 #include "SkBlurMask.h"
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 GrTextureAccess fBlurProfileAccess; 602 GrTextureAccess fBlurProfileAccess;
603 603
604 GR_DECLARE_EFFECT_TEST; 604 GR_DECLARE_EFFECT_TEST;
605 605
606 typedef GrEffect INHERITED; 606 typedef GrEffect INHERITED;
607 }; 607 };
608 608
609 class GrGLRectBlurEffect : public GrGLEffect { 609 class GrGLRectBlurEffect : public GrGLEffect {
610 public: 610 public:
611 GrGLRectBlurEffect(const GrBackendEffectFactory& factory, 611 GrGLRectBlurEffect(const GrBackendEffectFactory& factory,
612 const GrEffect&); 612 const GrDrawEffect&);
613 virtual void emitCode(GrGLProgramBuilder*, 613 virtual void emitCode(GrGLProgramBuilder*,
614 const GrEffect&, 614 const GrDrawEffect&,
615 const GrEffectKey&, 615 const GrEffectKey&,
616 const char* outputColor, 616 const char* outputColor,
617 const char* inputColor, 617 const char* inputColor,
618 const TransformedCoordsArray&, 618 const TransformedCoordsArray&,
619 const TextureSamplerArray&) SK_OVERRIDE; 619 const TextureSamplerArray&) SK_OVERRIDE;
620 620
621 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE; 621 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE;
622 622
623 private: 623 private:
624 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 624 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
625 625
626 UniformHandle fProxyRectUniform; 626 UniformHandle fProxyRectUniform;
627 UniformHandle fProfileSizeUniform; 627 UniformHandle fProfileSizeUniform;
628 628
629 typedef GrGLEffect INHERITED; 629 typedef GrGLEffect INHERITED;
630 }; 630 };
631 631
632 632
633 633
634 GrGLRectBlurEffect::GrGLRectBlurEffect(const GrBackendEffectFactory& factory, co nst GrEffect&) 634 GrGLRectBlurEffect::GrGLRectBlurEffect(const GrBackendEffectFactory& factory, co nst GrDrawEffect&)
635 : INHERITED(factory) { 635 : INHERITED(factory) {
636 } 636 }
637 637
638 void OutputRectBlurProfileLookup(GrGLFragmentShaderBuilder* fsBuilder, 638 void OutputRectBlurProfileLookup(GrGLFragmentShaderBuilder* fsBuilder,
639 const GrGLShaderBuilder::TextureSampler& sample r, 639 const GrGLShaderBuilder::TextureSampler& sample r,
640 const char *output, 640 const char *output,
641 const char *profileSize, const char *loc, 641 const char *profileSize, const char *loc,
642 const char *blurred_width, 642 const char *blurred_width,
643 const char *sharp_width) { 643 const char *sharp_width) {
644 fsBuilder->codeAppendf("\tfloat %s;\n", output); 644 fsBuilder->codeAppendf("\tfloat %s;\n", output);
645 fsBuilder->codeAppendf("\t\t{\n"); 645 fsBuilder->codeAppendf("\t\t{\n");
646 fsBuilder->codeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/ %s;\n", 646 fsBuilder->codeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/ %s;\n",
647 loc, blurred_width, sharp_width, profileSize); 647 loc, blurred_width, sharp_width, profileSize);
648 fsBuilder->codeAppendf("\t\t\t%s = ", output); 648 fsBuilder->codeAppendf("\t\t\t%s = ", output);
649 fsBuilder->appendTextureLookup(sampler, "vec2(coord,0.5)"); 649 fsBuilder->appendTextureLookup(sampler, "vec2(coord,0.5)");
650 fsBuilder->codeAppend(".a;\n"); 650 fsBuilder->codeAppend(".a;\n");
651 fsBuilder->codeAppendf("\t\t}\n"); 651 fsBuilder->codeAppendf("\t\t}\n");
652 } 652 }
653 653
654 void GrGLRectBlurEffect::emitCode(GrGLProgramBuilder* builder, 654 void GrGLRectBlurEffect::emitCode(GrGLProgramBuilder* builder,
655 const GrEffect&, 655 const GrDrawEffect&,
656 const GrEffectKey& key, 656 const GrEffectKey& key,
657 const char* outputColor, 657 const char* outputColor,
658 const char* inputColor, 658 const char* inputColor,
659 const TransformedCoordsArray& coords, 659 const TransformedCoordsArray& coords,
660 const TextureSamplerArray& samplers) { 660 const TextureSamplerArray& samplers) {
661 661
662 const char *rectName; 662 const char *rectName;
663 const char *profileSizeName; 663 const char *profileSizeName;
664 664
665 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi lity, 665 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi lity,
(...skipping 23 matching lines...) Expand all
689 fsBuilder->codeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n"); 689 fsBuilder->codeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n");
690 690
691 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "horiz_lookup", profileS izeName, "translatedPos.x", "width", "wh.x"); 691 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "horiz_lookup", profileS izeName, "translatedPos.x", "width", "wh.x");
692 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "vert_lookup", profileSi zeName, "translatedPos.y", "height", "wh.y"); 692 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "vert_lookup", profileSi zeName, "translatedPos.y", "height", "wh.y");
693 693
694 fsBuilder->codeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n"); 694 fsBuilder->codeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n");
695 fsBuilder->codeAppendf("\t%s = src * vec4(final);\n", outputColor ); 695 fsBuilder->codeAppendf("\t%s = src * vec4(final);\n", outputColor );
696 } 696 }
697 697
698 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman, 698 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman,
699 const GrEffect& effect) { 699 const GrDrawEffect& drawEffect) {
700 const GrRectBlurEffect& rbe = effect.cast<GrRectBlurEffect>(); 700 const GrRectBlurEffect& rbe = drawEffect.castEffect<GrRectBlurEffect>();
701 SkRect rect = rbe.getRect(); 701 SkRect rect = rbe.getRect();
702 702
703 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot tom); 703 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot tom);
704 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); 704 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma()));
705 } 705 }
706 706
707 bool GrRectBlurEffect::CreateBlurProfileTexture(GrContext *context, float sigma, 707 bool GrRectBlurEffect::CreateBlurProfileTexture(GrContext *context, float sigma,
708 GrTexture **blurProfileTexture) { 708 GrTexture **blurProfileTexture) {
709 GrTextureParams params; 709 GrTextureParams params;
710 GrTextureDesc texDesc; 710 GrTextureDesc texDesc;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 } 754 }
755 755
756 GrRectBlurEffect::~GrRectBlurEffect() { 756 GrRectBlurEffect::~GrRectBlurEffect() {
757 } 757 }
758 758
759 const GrBackendEffectFactory& GrRectBlurEffect::getFactory() const { 759 const GrBackendEffectFactory& GrRectBlurEffect::getFactory() const {
760 return GrTBackendEffectFactory<GrRectBlurEffect>::getInstance(); 760 return GrTBackendEffectFactory<GrRectBlurEffect>::getInstance();
761 } 761 }
762 762
763 bool GrRectBlurEffect::onIsEqual(const GrEffect& sBase) const { 763 bool GrRectBlurEffect::onIsEqual(const GrEffect& sBase) const {
764 const GrRectBlurEffect& s = sBase.cast<GrRectBlurEffect>(); 764 const GrRectBlurEffect& s = CastEffect<GrRectBlurEffect>(sBase);
765 return this->getSigma() == s.getSigma() && this->getRect() == s.getRect(); 765 return this->getSigma() == s.getSigma() && this->getRect() == s.getRect();
766 } 766 }
767 767
768 void GrRectBlurEffect::getConstantColorComponents(GrColor* color, uint32_t* vali dFlags) const { 768 void GrRectBlurEffect::getConstantColorComponents(GrColor* color, uint32_t* vali dFlags) const {
769 *validFlags = 0; 769 *validFlags = 0;
770 return; 770 return;
771 } 771 }
772 772
773 GR_DEFINE_EFFECT_TEST(GrRectBlurEffect); 773 GR_DEFINE_EFFECT_TEST(GrRectBlurEffect);
774 774
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 938
939 GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect, GrTextur e *ninePatchTexture) 939 GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect, GrTextur e *ninePatchTexture)
940 : fRRect(rrect), 940 : fRRect(rrect),
941 fSigma(sigma), 941 fSigma(sigma),
942 fNinePatchAccess(ninePatchTexture) { 942 fNinePatchAccess(ninePatchTexture) {
943 this->addTextureAccess(&fNinePatchAccess); 943 this->addTextureAccess(&fNinePatchAccess);
944 this->setWillReadFragmentPosition(); 944 this->setWillReadFragmentPosition();
945 } 945 }
946 946
947 bool GrRRectBlurEffect::onIsEqual(const GrEffect& other) const { 947 bool GrRRectBlurEffect::onIsEqual(const GrEffect& other) const {
948 const GrRRectBlurEffect& rrbe = other.cast<GrRRectBlurEffect>(); 948 const GrRRectBlurEffect& rrbe = CastEffect<GrRRectBlurEffect>(other);
949 return fRRect.getSimpleRadii().fX == rrbe.fRRect.getSimpleRadii().fX && fSig ma == rrbe.fSigma; 949 return fRRect.getSimpleRadii().fX == rrbe.fRRect.getSimpleRadii().fX && fSig ma == rrbe.fSigma;
950 } 950 }
951 951
952 ////////////////////////////////////////////////////////////////////////////// 952 //////////////////////////////////////////////////////////////////////////////
953 953
954 GR_DEFINE_EFFECT_TEST(GrRRectBlurEffect); 954 GR_DEFINE_EFFECT_TEST(GrRRectBlurEffect);
955 955
956 GrEffect* GrRRectBlurEffect::TestCreate(SkRandom* random, 956 GrEffect* GrRRectBlurEffect::TestCreate(SkRandom* random,
957 GrContext* context, 957 GrContext* context,
958 const GrDrawTargetCaps& caps, 958 const GrDrawTargetCaps& caps,
959 GrTexture*[]) { 959 GrTexture*[]) {
960 SkScalar w = random->nextRangeScalar(100.f, 1000.f); 960 SkScalar w = random->nextRangeScalar(100.f, 1000.f);
961 SkScalar h = random->nextRangeScalar(100.f, 1000.f); 961 SkScalar h = random->nextRangeScalar(100.f, 1000.f);
962 SkScalar r = random->nextRangeF(1.f, 9.f); 962 SkScalar r = random->nextRangeF(1.f, 9.f);
963 SkScalar sigma = random->nextRangeF(1.f,10.f); 963 SkScalar sigma = random->nextRangeF(1.f,10.f);
964 SkRRect rrect; 964 SkRRect rrect;
965 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); 965 rrect.setRectXY(SkRect::MakeWH(w, h), r, r);
966 return GrRRectBlurEffect::Create(context, sigma, rrect); 966 return GrRRectBlurEffect::Create(context, sigma, rrect);
967 } 967 }
968 968
969 ////////////////////////////////////////////////////////////////////////////// 969 //////////////////////////////////////////////////////////////////////////////
970 970
971 class GrGLRRectBlurEffect : public GrGLEffect { 971 class GrGLRRectBlurEffect : public GrGLEffect {
972 public: 972 public:
973 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrEffect&); 973 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
974 974
975 virtual void emitCode(GrGLProgramBuilder* builder, 975 virtual void emitCode(GrGLProgramBuilder* builder,
976 const GrEffect& effect, 976 const GrDrawEffect& drawEffect,
977 const GrEffectKey& key, 977 const GrEffectKey& key,
978 const char* outputColor, 978 const char* outputColor,
979 const char* inputColor, 979 const char* inputColor,
980 const TransformedCoordsArray&, 980 const TransformedCoordsArray&,
981 const TextureSamplerArray&) SK_OVERRIDE; 981 const TextureSamplerArray&) SK_OVERRIDE;
982 982
983 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE; 983 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE;
984 984
985 private: 985 private:
986 GrGLProgramDataManager::UniformHandle fProxyRectUniform; 986 GrGLProgramDataManager::UniformHandle fProxyRectUniform;
987 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform; 987 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform;
988 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform; 988 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform;
989 typedef GrGLEffect INHERITED; 989 typedef GrGLEffect INHERITED;
990 }; 990 };
991 991
992 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory, 992 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory,
993 const GrEffect& effect) 993 const GrDrawEffect& drawEffect)
994 : INHERITED (factory) { 994 : INHERITED (factory) {
995 } 995 }
996 996
997 void GrGLRRectBlurEffect::emitCode(GrGLProgramBuilder* builder, 997 void GrGLRRectBlurEffect::emitCode(GrGLProgramBuilder* builder,
998 const GrEffect& effect, 998 const GrDrawEffect& drawEffect,
999 const GrEffectKey& key, 999 const GrEffectKey& key,
1000 const char* outputColor, 1000 const char* outputColor,
1001 const char* inputColor, 1001 const char* inputColor,
1002 const TransformedCoordsArray&, 1002 const TransformedCoordsArray&,
1003 const TextureSamplerArray& samplers) { 1003 const TextureSamplerArray& samplers) {
1004 const char *rectName; 1004 const char *rectName;
1005 const char *cornerRadiusName; 1005 const char *cornerRadiusName;
1006 const char *blurRadiusName; 1006 const char *blurRadiusName;
1007 1007
1008 // The proxy rect has left, top, right, and bottom edges correspond to 1008 // The proxy rect has left, top, right, and bottom edges correspond to
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 1045
1046 fsBuilder->codeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n"); 1046 fsBuilder->codeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n");
1047 fsBuilder->codeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n "); 1047 fsBuilder->codeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n ");
1048 1048
1049 fsBuilder->codeAppendf("\t%s = ", outputColor); 1049 fsBuilder->codeAppendf("\t%s = ", outputColor);
1050 fsBuilder->appendTextureLookupAndModulate(inputColor, samplers[0], "texCoord "); 1050 fsBuilder->appendTextureLookupAndModulate(inputColor, samplers[0], "texCoord ");
1051 fsBuilder->codeAppend(";\n"); 1051 fsBuilder->codeAppend(";\n");
1052 } 1052 }
1053 1053
1054 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman, 1054 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman,
1055 const GrEffect& effect) { 1055 const GrDrawEffect& drawEffect) {
1056 const GrRRectBlurEffect& brre = effect.cast<GrRRectBlurEffect>(); 1056 const GrRRectBlurEffect& brre = drawEffect.castEffect<GrRRectBlurEffect>();
1057 SkRRect rrect = brre.getRRect(); 1057 SkRRect rrect = brre.getRRect();
1058 1058
1059 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f); 1059 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f);
1060 pdman.set1f(fBlurRadiusUniform, blurRadius); 1060 pdman.set1f(fBlurRadiusUniform, blurRadius);
1061 1061
1062 SkRect rect = rrect.getBounds(); 1062 SkRect rect = rrect.getBounds();
1063 rect.outset(blurRadius, blurRadius); 1063 rect.outset(blurRadius, blurRadius);
1064 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot tom); 1064 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot tom);
1065 1065
1066 SkScalar radius = 0; 1066 SkScalar radius = 0;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 } else { 1219 } else {
1220 str->append("None"); 1220 str->append("None");
1221 } 1221 }
1222 str->append("))"); 1222 str->append("))");
1223 } 1223 }
1224 #endif 1224 #endif
1225 1225
1226 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) 1226 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter)
1227 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) 1227 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl)
1228 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1228 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkArithmeticMode.cpp ('k') | src/effects/SkColorFilters.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698