OLD | NEW |
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" |
11 #include "SkGpuBlurUtils.h" | 11 #include "SkGpuBlurUtils.h" |
12 #include "SkReadBuffer.h" | 12 #include "SkReadBuffer.h" |
13 #include "SkWriteBuffer.h" | 13 #include "SkWriteBuffer.h" |
14 #include "SkMaskFilter.h" | 14 #include "SkMaskFilter.h" |
15 #include "SkRRect.h" | 15 #include "SkRRect.h" |
16 #include "SkRTConf.h" | 16 #include "SkRTConf.h" |
17 #include "SkStringUtils.h" | 17 #include "SkStringUtils.h" |
18 #include "SkStrokeRec.h" | 18 #include "SkStrokeRec.h" |
19 | 19 |
20 #if SK_SUPPORT_GPU | 20 #if SK_SUPPORT_GPU |
21 #include "GrContext.h" | 21 #include "GrContext.h" |
22 #include "GrTexture.h" | 22 #include "GrTexture.h" |
23 #include "GrEffect.h" | 23 #include "GrEffect.h" |
24 #include "gl/GrGLEffect.h" | 24 #include "gl/GrGLEffect.h" |
25 #include "gl/GrGLShaderBuilder.h" | 25 #include "gl/builders/GrGLProgramBuilder.h" |
26 #include "effects/GrSimpleTextureEffect.h" | 26 #include "effects/GrSimpleTextureEffect.h" |
27 #include "GrTBackendEffectFactory.h" | 27 #include "GrTBackendEffectFactory.h" |
28 #include "SkGrPixelRef.h" | 28 #include "SkGrPixelRef.h" |
29 #include "SkDraw.h" | 29 #include "SkDraw.h" |
30 #endif | 30 #endif |
31 | 31 |
32 SkScalar SkBlurMaskFilter::ConvertRadiusToSigma(SkScalar radius) { | 32 SkScalar SkBlurMaskFilter::ConvertRadiusToSigma(SkScalar radius) { |
33 return SkBlurMask::ConvertRadiusToSigma(radius); | 33 return SkBlurMask::ConvertRadiusToSigma(radius); |
34 } | 34 } |
35 | 35 |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 GrDrawEffect&); | 612 const GrDrawEffect&); |
613 virtual void emitCode(GrGLShaderBuilder*, | 613 virtual void emitCode(GrGLProgramBuilder*, |
614 const GrDrawEffect&, | 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 GrDrawEffect&) SK_
OVERRIDE; | 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 GrDrawEffect&) | 634 GrGLRectBlurEffect::GrGLRectBlurEffect(const GrBackendEffectFactory& factory, co
nst GrDrawEffect&) |
635 : INHERITED(factory) { | 635 : INHERITED(factory) { |
636 } | 636 } |
637 | 637 |
638 void OutputRectBlurProfileLookup(GrGLShaderBuilder* builder, | 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 builder->fsCodeAppendf("\tfloat %s;\n", output); | 644 fsBuilder->codeAppendf("\tfloat %s;\n", output); |
645 builder->fsCodeAppendf("\t\t{\n"); | 645 fsBuilder->codeAppendf("\t\t{\n"); |
646 builder->fsCodeAppendf("\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 builder->fsCodeAppendf("\t\t\t%s = ", output); | 648 fsBuilder->codeAppendf("\t\t\t%s = ", output); |
649 builder->fsAppendTextureLookup(sampler, "vec2(coord,0.5)"); | 649 fsBuilder->appendTextureLookup(sampler, "vec2(coord,0.5)"); |
650 builder->fsCodeAppend(".a;\n"); | 650 fsBuilder->codeAppend(".a;\n"); |
651 builder->fsCodeAppendf("\t\t}\n"); | 651 fsBuilder->codeAppendf("\t\t}\n"); |
652 } | 652 } |
653 | 653 |
654 void GrGLRectBlurEffect::emitCode(GrGLShaderBuilder* builder, | 654 void GrGLRectBlurEffect::emitCode(GrGLProgramBuilder* builder, |
655 const GrDrawEffect&, | 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(GrGLShaderBuilder::kFragment_Visibil
ity, | 665 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
666 kVec4f_GrSLType, | 666 kVec4f_GrSLType, |
667 "proxyRect", | 667 "proxyRect", |
668 &rectName); | 668 &rectName); |
669 fProfileSizeUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visib
ility, | 669 fProfileSizeUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visi
bility, |
670 kFloat_GrSLType, | 670 kFloat_GrSLType, |
671 "profileSize", | 671 "profileSize", |
672 &profileSizeName); | 672 &profileSizeName); |
673 | 673 |
674 const char *fragmentPos = builder->fragmentPosition(); | 674 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 675 const char *fragmentPos = fsBuilder->fragmentPosition(); |
675 | 676 |
676 if (inputColor) { | 677 if (inputColor) { |
677 builder->fsCodeAppendf("\tvec4 src=%s;\n", inputColor); | 678 fsBuilder->codeAppendf("\tvec4 src=%s;\n", inputColor); |
678 } else { | 679 } else { |
679 builder->fsCodeAppendf("\tvec4 src=vec4(1)\n;"); | 680 fsBuilder->codeAppendf("\tvec4 src=vec4(1)\n;"); |
680 } | 681 } |
681 | 682 |
682 builder->fsCodeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); | 683 fsBuilder->codeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); |
683 builder->fsCodeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; | 684 fsBuilder->codeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; |
684 builder->fsCodeAppendf("\tfloat height = %s.w - %s.y;\n", rectName, rectName
); | 685 fsBuilder->codeAppendf("\tfloat height = %s.w - %s.y;\n", rectName, rectName
); |
685 | 686 |
686 builder->fsCodeAppendf("\tvec2 smallDims = vec2(width - %s, height-%s);\n",
profileSizeName, profileSizeName); | 687 fsBuilder->codeAppendf("\tvec2 smallDims = vec2(width - %s, height-%s);\n",
profileSizeName, profileSizeName); |
687 builder->fsCodeAppendf("\tfloat center = 2.0 * floor(%s/2.0 + .25) - 1.0;\n"
, profileSizeName); | 688 fsBuilder->codeAppendf("\tfloat center = 2.0 * floor(%s/2.0 + .25) - 1.0;\n"
, profileSizeName); |
688 builder->fsCodeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n"); | 689 fsBuilder->codeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n"); |
689 | 690 |
690 OutputRectBlurProfileLookup(builder, samplers[0], "horiz_lookup", profileSiz
eName, "translatedPos.x", "width", "wh.x"); | 691 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "horiz_lookup", profileS
izeName, "translatedPos.x", "width", "wh.x"); |
691 OutputRectBlurProfileLookup(builder, samplers[0], "vert_lookup", profileSize
Name, "translatedPos.y", "height", "wh.y"); | 692 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "vert_lookup", profileSi
zeName, "translatedPos.y", "height", "wh.y"); |
692 | 693 |
693 builder->fsCodeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n"); | 694 fsBuilder->codeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n"); |
694 builder->fsCodeAppendf("\t%s = src * vec4(final);\n", outputColor ); | 695 fsBuilder->codeAppendf("\t%s = src * vec4(final);\n", outputColor ); |
695 } | 696 } |
696 | 697 |
697 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman, | 698 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman, |
698 const GrDrawEffect& drawEffect) { | 699 const GrDrawEffect& drawEffect) { |
699 const GrRectBlurEffect& rbe = drawEffect.castEffect<GrRectBlurEffect>(); | 700 const GrRectBlurEffect& rbe = drawEffect.castEffect<GrRectBlurEffect>(); |
700 SkRect rect = rbe.getRect(); | 701 SkRect rect = rbe.getRect(); |
701 | 702 |
702 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); |
703 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); | 704 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); |
704 } | 705 } |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); | 965 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); |
965 return GrRRectBlurEffect::Create(context, sigma, rrect); | 966 return GrRRectBlurEffect::Create(context, sigma, rrect); |
966 } | 967 } |
967 | 968 |
968 ////////////////////////////////////////////////////////////////////////////// | 969 ////////////////////////////////////////////////////////////////////////////// |
969 | 970 |
970 class GrGLRRectBlurEffect : public GrGLEffect { | 971 class GrGLRRectBlurEffect : public GrGLEffect { |
971 public: | 972 public: |
972 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrDrawEffect&); | 973 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrDrawEffect&); |
973 | 974 |
974 virtual void emitCode(GrGLShaderBuilder* builder, | 975 virtual void emitCode(GrGLProgramBuilder* builder, |
975 const GrDrawEffect& drawEffect, | 976 const GrDrawEffect& drawEffect, |
976 const GrEffectKey& key, | 977 const GrEffectKey& key, |
977 const char* outputColor, | 978 const char* outputColor, |
978 const char* inputColor, | 979 const char* inputColor, |
979 const TransformedCoordsArray&, | 980 const TransformedCoordsArray&, |
980 const TextureSamplerArray&) SK_OVERRIDE; | 981 const TextureSamplerArray&) SK_OVERRIDE; |
981 | 982 |
982 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; | 983 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; |
983 | 984 |
984 private: | 985 private: |
985 GrGLProgramDataManager::UniformHandle fProxyRectUniform; | 986 GrGLProgramDataManager::UniformHandle fProxyRectUniform; |
986 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform; | 987 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform; |
987 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform; | 988 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform; |
988 typedef GrGLEffect INHERITED; | 989 typedef GrGLEffect INHERITED; |
989 }; | 990 }; |
990 | 991 |
991 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory, | 992 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory, |
992 const GrDrawEffect& drawEffect) | 993 const GrDrawEffect& drawEffect) |
993 : INHERITED (factory) { | 994 : INHERITED (factory) { |
994 } | 995 } |
995 | 996 |
996 void GrGLRRectBlurEffect::emitCode(GrGLShaderBuilder* builder, | 997 void GrGLRRectBlurEffect::emitCode(GrGLProgramBuilder* builder, |
997 const GrDrawEffect& drawEffect, | 998 const GrDrawEffect& drawEffect, |
998 const GrEffectKey& key, | 999 const GrEffectKey& key, |
999 const char* outputColor, | 1000 const char* outputColor, |
1000 const char* inputColor, | 1001 const char* inputColor, |
1001 const TransformedCoordsArray&, | 1002 const TransformedCoordsArray&, |
1002 const TextureSamplerArray& samplers) { | 1003 const TextureSamplerArray& samplers) { |
1003 const char *rectName; | 1004 const char *rectName; |
1004 const char *cornerRadiusName; | 1005 const char *cornerRadiusName; |
1005 const char *blurRadiusName; | 1006 const char *blurRadiusName; |
1006 | 1007 |
1007 // 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 |
1008 // components x, y, z, and w, respectively. | 1009 // components x, y, z, and w, respectively. |
1009 | 1010 |
1010 fProxyRectUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibil
ity, | 1011 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
1011 kVec4f_GrSLType, | 1012 kVec4f_GrSLType, |
1012 "proxyRect", | 1013 "proxyRect", |
1013 &rectName); | 1014 &rectName); |
1014 fCornerRadiusUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visi
bility, | 1015 fCornerRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, |
1015 kFloat_GrSLType, | 1016 kFloat_GrSLType, |
1016 "cornerRadius", | 1017 "cornerRadius", |
1017 &cornerRadiusName); | 1018 &cornerRadiusName); |
1018 fBlurRadiusUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibi
lity, | 1019 fBlurRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visib
ility, |
1019 kFloat_GrSLType, | 1020 kFloat_GrSLType, |
1020 "blurRadius", | 1021 "blurRadius", |
1021 &blurRadiusName); | 1022 &blurRadiusName); |
1022 const char* fragmentPos = builder->fragmentPosition(); | 1023 |
| 1024 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 1025 const char* fragmentPos = fsBuilder->fragmentPosition(); |
1023 | 1026 |
1024 // warp the fragment position to the appropriate part of the 9patch blur tex
ture | 1027 // warp the fragment position to the appropriate part of the 9patch blur tex
ture |
1025 | 1028 |
1026 builder->fsCodeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); | 1029 fsBuilder->codeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); |
1027 builder->fsCodeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); | 1030 fsBuilder->codeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); |
1028 builder->fsCodeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); | 1031 fsBuilder->codeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); |
1029 builder->fsCodeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); | 1032 fsBuilder->codeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); |
1030 | 1033 |
1031 builder->fsCodeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); | 1034 fsBuilder->codeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); |
1032 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.x = threshold;\n"); | 1035 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.x = threshold;\n"); |
1033 builder->fsCodeAppendf("\t\t} else if (translatedFragPos.x >= (middle.x + th
reshold)) {\n"); | 1036 fsBuilder->codeAppendf("\t\t} else if (translatedFragPos.x >= (middle.x + th
reshold)) {\n"); |
1034 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.x -= middle.x - 1.0;\n"); | 1037 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.x -= middle.x - 1.0;\n"); |
1035 builder->fsCodeAppendf("\t\t}\n"); | 1038 fsBuilder->codeAppendf("\t\t}\n"); |
1036 | 1039 |
1037 builder->fsCodeAppendf("\t\tif (translatedFragPos.y > threshold && translate
dFragPos.y < (middle.y+threshold)) {\n" ); | 1040 fsBuilder->codeAppendf("\t\tif (translatedFragPos.y > threshold && translate
dFragPos.y < (middle.y+threshold)) {\n" ); |
1038 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.y = threshold;\n"); | 1041 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.y = threshold;\n"); |
1039 builder->fsCodeAppendf("\t\t} else if (translatedFragPos.y >= (middle.y + th
reshold)) {\n"); | 1042 fsBuilder->codeAppendf("\t\t} else if (translatedFragPos.y >= (middle.y + th
reshold)) {\n"); |
1040 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.y -= middle.y - 1.0;\n"); | 1043 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.y -= middle.y - 1.0;\n"); |
1041 builder->fsCodeAppendf("\t\t}\n"); | 1044 fsBuilder->codeAppendf("\t\t}\n"); |
1042 | 1045 |
1043 builder->fsCodeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n"); | 1046 fsBuilder->codeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n"); |
1044 builder->fsCodeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n
"); | 1047 fsBuilder->codeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n
"); |
1045 | 1048 |
1046 builder->fsCodeAppendf("\t%s = ", outputColor); | 1049 fsBuilder->codeAppendf("\t%s = ", outputColor); |
1047 builder->fsAppendTextureLookupAndModulate(inputColor, samplers[0], "texCoord
"); | 1050 fsBuilder->appendTextureLookupAndModulate(inputColor, samplers[0], "texCoord
"); |
1048 builder->fsCodeAppend(";\n"); | 1051 fsBuilder->codeAppend(";\n"); |
1049 } | 1052 } |
1050 | 1053 |
1051 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman, | 1054 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman, |
1052 const GrDrawEffect& drawEffect) { | 1055 const GrDrawEffect& drawEffect) { |
1053 const GrRRectBlurEffect& brre = drawEffect.castEffect<GrRRectBlurEffect>(); | 1056 const GrRRectBlurEffect& brre = drawEffect.castEffect<GrRRectBlurEffect>(); |
1054 SkRRect rrect = brre.getRRect(); | 1057 SkRRect rrect = brre.getRRect(); |
1055 | 1058 |
1056 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f); | 1059 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f); |
1057 pdman.set1f(fBlurRadiusUniform, blurRadius); | 1060 pdman.set1f(fBlurRadiusUniform, blurRadius); |
1058 | 1061 |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1216 } else { | 1219 } else { |
1217 str->append("None"); | 1220 str->append("None"); |
1218 } | 1221 } |
1219 str->append("))"); | 1222 str->append("))"); |
1220 } | 1223 } |
1221 #endif | 1224 #endif |
1222 | 1225 |
1223 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1226 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
1224 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1227 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
1225 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1228 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |