| 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 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 | 591 |
| 592 GR_DECLARE_EFFECT_TEST; | 592 GR_DECLARE_EFFECT_TEST; |
| 593 | 593 |
| 594 typedef GrEffect INHERITED; | 594 typedef GrEffect INHERITED; |
| 595 }; | 595 }; |
| 596 | 596 |
| 597 class GrGLRectBlurEffect : public GrGLEffect { | 597 class GrGLRectBlurEffect : public GrGLEffect { |
| 598 public: | 598 public: |
| 599 GrGLRectBlurEffect(const GrBackendEffectFactory& factory, | 599 GrGLRectBlurEffect(const GrBackendEffectFactory& factory, |
| 600 const GrDrawEffect&); | 600 const GrDrawEffect&); |
| 601 virtual void emitCode(GrGLShaderBuilder*, | 601 virtual void emitCode(GrGLProgramBuilder*, |
| 602 const GrDrawEffect&, | 602 const GrDrawEffect&, |
| 603 const GrEffectKey&, | 603 const GrEffectKey&, |
| 604 const char* outputColor, | 604 const char* outputColor, |
| 605 const char* inputColor, | 605 const char* inputColor, |
| 606 const TransformedCoordsArray&, | 606 const TransformedCoordsArray&, |
| 607 const TextureSamplerArray&) SK_OVERRIDE; | 607 const TextureSamplerArray&) SK_OVERRIDE; |
| 608 | 608 |
| 609 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; | 609 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; |
| 610 | 610 |
| 611 private: | 611 private: |
| 612 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 612 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 613 | 613 |
| 614 UniformHandle fProxyRectUniform; | 614 UniformHandle fProxyRectUniform; |
| 615 UniformHandle fProfileSizeUniform; | 615 UniformHandle fProfileSizeUniform; |
| 616 | 616 |
| 617 typedef GrGLEffect INHERITED; | 617 typedef GrGLEffect INHERITED; |
| 618 }; | 618 }; |
| 619 | 619 |
| 620 | 620 |
| 621 | 621 |
| 622 GrGLRectBlurEffect::GrGLRectBlurEffect(const GrBackendEffectFactory& factory, co
nst GrDrawEffect&) | 622 GrGLRectBlurEffect::GrGLRectBlurEffect(const GrBackendEffectFactory& factory, co
nst GrDrawEffect&) |
| 623 : INHERITED(factory) { | 623 : INHERITED(factory) { |
| 624 } | 624 } |
| 625 | 625 |
| 626 void OutputRectBlurProfileLookup(GrGLShaderBuilder* builder, | 626 void OutputRectBlurProfileLookup(GrGLFragmentShaderBuilder* fsBuilder, |
| 627 const GrGLShaderBuilder::TextureSampler& sample
r, | 627 const GrGLShaderBuilder::TextureSampler& sample
r, |
| 628 const char *output, | 628 const char *output, |
| 629 const char *profileSize, const char *loc, | 629 const char *profileSize, const char *loc, |
| 630 const char *blurred_width, | 630 const char *blurred_width, |
| 631 const char *sharp_width) { | 631 const char *sharp_width) { |
| 632 builder->fsCodeAppendf("\tfloat %s;\n", output); | 632 fsBuilder->codeAppendf("\tfloat %s;\n", output); |
| 633 builder->fsCodeAppendf("\t\t{\n"); | 633 fsBuilder->codeAppendf("\t\t{\n"); |
| 634 builder->fsCodeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/
%s;\n", | 634 fsBuilder->codeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/
%s;\n", |
| 635 loc, blurred_width, sharp_width, profileSize); | 635 loc, blurred_width, sharp_width, profileSize); |
| 636 builder->fsCodeAppendf("\t\t\t%s = ", output); | 636 fsBuilder->codeAppendf("\t\t\t%s = ", output); |
| 637 builder->fsAppendTextureLookup(sampler, "vec2(coord,0.5)"); | 637 fsBuilder->appendTextureLookup(sampler, "vec2(coord,0.5)"); |
| 638 builder->fsCodeAppend(".a;\n"); | 638 fsBuilder->codeAppend(".a;\n"); |
| 639 builder->fsCodeAppendf("\t\t}\n"); | 639 fsBuilder->codeAppendf("\t\t}\n"); |
| 640 } | 640 } |
| 641 | 641 |
| 642 void GrGLRectBlurEffect::emitCode(GrGLShaderBuilder* builder, | 642 void GrGLRectBlurEffect::emitCode(GrGLProgramBuilder* builder, |
| 643 const GrDrawEffect&, | 643 const GrDrawEffect&, |
| 644 const GrEffectKey& key, | 644 const GrEffectKey& key, |
| 645 const char* outputColor, | 645 const char* outputColor, |
| 646 const char* inputColor, | 646 const char* inputColor, |
| 647 const TransformedCoordsArray& coords, | 647 const TransformedCoordsArray& coords, |
| 648 const TextureSamplerArray& samplers) { | 648 const TextureSamplerArray& samplers) { |
| 649 | 649 |
| 650 const char *rectName; | 650 const char *rectName; |
| 651 const char *profileSizeName; | 651 const char *profileSizeName; |
| 652 | 652 |
| 653 fProxyRectUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibil
ity, | 653 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
| 654 kVec4f_GrSLType, | 654 kVec4f_GrSLType, |
| 655 "proxyRect", | 655 "proxyRect", |
| 656 &rectName); | 656 &rectName); |
| 657 fProfileSizeUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visib
ility, | 657 fProfileSizeUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visi
bility, |
| 658 kFloat_GrSLType, | 658 kFloat_GrSLType, |
| 659 "profileSize", | 659 "profileSize", |
| 660 &profileSizeName); | 660 &profileSizeName); |
| 661 | 661 |
| 662 const char *fragmentPos = builder->fragmentPosition(); | 662 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 663 const char *fragmentPos = fsBuilder->fragmentPosition(); |
| 663 | 664 |
| 664 if (inputColor) { | 665 if (inputColor) { |
| 665 builder->fsCodeAppendf("\tvec4 src=%s;\n", inputColor); | 666 fsBuilder->codeAppendf("\tvec4 src=%s;\n", inputColor); |
| 666 } else { | 667 } else { |
| 667 builder->fsCodeAppendf("\tvec4 src=vec4(1)\n;"); | 668 fsBuilder->codeAppendf("\tvec4 src=vec4(1)\n;"); |
| 668 } | 669 } |
| 669 | 670 |
| 670 builder->fsCodeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); | 671 fsBuilder->codeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); |
| 671 builder->fsCodeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; | 672 fsBuilder->codeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; |
| 672 builder->fsCodeAppendf("\tfloat height = %s.w - %s.y;\n", rectName, rectName
); | 673 fsBuilder->codeAppendf("\tfloat height = %s.w - %s.y;\n", rectName, rectName
); |
| 673 | 674 |
| 674 builder->fsCodeAppendf("\tvec2 smallDims = vec2(width - %s, height-%s);\n",
profileSizeName, profileSizeName); | 675 fsBuilder->codeAppendf("\tvec2 smallDims = vec2(width - %s, height-%s);\n",
profileSizeName, profileSizeName); |
| 675 builder->fsCodeAppendf("\tfloat center = 2.0 * floor(%s/2.0 + .25) - 1.0;\n"
, profileSizeName); | 676 fsBuilder->codeAppendf("\tfloat center = 2.0 * floor(%s/2.0 + .25) - 1.0;\n"
, profileSizeName); |
| 676 builder->fsCodeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n"); | 677 fsBuilder->codeAppendf("\tvec2 wh = smallDims - vec2(center,center);\n"); |
| 677 | 678 |
| 678 OutputRectBlurProfileLookup(builder, samplers[0], "horiz_lookup", profileSiz
eName, "translatedPos.x", "width", "wh.x"); | 679 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "horiz_lookup", profileS
izeName, "translatedPos.x", "width", "wh.x"); |
| 679 OutputRectBlurProfileLookup(builder, samplers[0], "vert_lookup", profileSize
Name, "translatedPos.y", "height", "wh.y"); | 680 OutputRectBlurProfileLookup(fsBuilder, samplers[0], "vert_lookup", profileSi
zeName, "translatedPos.y", "height", "wh.y"); |
| 680 | 681 |
| 681 builder->fsCodeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n"); | 682 fsBuilder->codeAppendf("\tfloat final = horiz_lookup * vert_lookup;\n"); |
| 682 builder->fsCodeAppendf("\t%s = src * vec4(final);\n", outputColor ); | 683 fsBuilder->codeAppendf("\t%s = src * vec4(final);\n", outputColor ); |
| 683 } | 684 } |
| 684 | 685 |
| 685 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman, | 686 void GrGLRectBlurEffect::setData(const GrGLProgramDataManager& pdman, |
| 686 const GrDrawEffect& drawEffect) { | 687 const GrDrawEffect& drawEffect) { |
| 687 const GrRectBlurEffect& rbe = drawEffect.castEffect<GrRectBlurEffect>(); | 688 const GrRectBlurEffect& rbe = drawEffect.castEffect<GrRectBlurEffect>(); |
| 688 SkRect rect = rbe.getRect(); | 689 SkRect rect = rbe.getRect(); |
| 689 | 690 |
| 690 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot
tom); | 691 pdman.set4f(fProxyRectUniform, rect.fLeft, rect.fTop, rect.fRight, rect.fBot
tom); |
| 691 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); | 692 pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); |
| 692 } | 693 } |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); | 953 rrect.setRectXY(SkRect::MakeWH(w, h), r, r); |
| 953 return GrRRectBlurEffect::Create(context, sigma, rrect); | 954 return GrRRectBlurEffect::Create(context, sigma, rrect); |
| 954 } | 955 } |
| 955 | 956 |
| 956 ////////////////////////////////////////////////////////////////////////////// | 957 ////////////////////////////////////////////////////////////////////////////// |
| 957 | 958 |
| 958 class GrGLRRectBlurEffect : public GrGLEffect { | 959 class GrGLRRectBlurEffect : public GrGLEffect { |
| 959 public: | 960 public: |
| 960 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrDrawEffect&); | 961 GrGLRRectBlurEffect(const GrBackendEffectFactory&, const GrDrawEffect&); |
| 961 | 962 |
| 962 virtual void emitCode(GrGLShaderBuilder* builder, | 963 virtual void emitCode(GrGLProgramBuilder* builder, |
| 963 const GrDrawEffect& drawEffect, | 964 const GrDrawEffect& drawEffect, |
| 964 const GrEffectKey& key, | 965 const GrEffectKey& key, |
| 965 const char* outputColor, | 966 const char* outputColor, |
| 966 const char* inputColor, | 967 const char* inputColor, |
| 967 const TransformedCoordsArray&, | 968 const TransformedCoordsArray&, |
| 968 const TextureSamplerArray&) SK_OVERRIDE; | 969 const TextureSamplerArray&) SK_OVERRIDE; |
| 969 | 970 |
| 970 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; | 971 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_
OVERRIDE; |
| 971 | 972 |
| 972 private: | 973 private: |
| 973 GrGLProgramDataManager::UniformHandle fProxyRectUniform; | 974 GrGLProgramDataManager::UniformHandle fProxyRectUniform; |
| 974 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform; | 975 GrGLProgramDataManager::UniformHandle fCornerRadiusUniform; |
| 975 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform; | 976 GrGLProgramDataManager::UniformHandle fBlurRadiusUniform; |
| 976 typedef GrGLEffect INHERITED; | 977 typedef GrGLEffect INHERITED; |
| 977 }; | 978 }; |
| 978 | 979 |
| 979 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory, | 980 GrGLRRectBlurEffect::GrGLRRectBlurEffect(const GrBackendEffectFactory& factory, |
| 980 const GrDrawEffect& drawEffect) | 981 const GrDrawEffect& drawEffect) |
| 981 : INHERITED (factory) { | 982 : INHERITED (factory) { |
| 982 } | 983 } |
| 983 | 984 |
| 984 void GrGLRRectBlurEffect::emitCode(GrGLShaderBuilder* builder, | 985 void GrGLRRectBlurEffect::emitCode(GrGLProgramBuilder* builder, |
| 985 const GrDrawEffect& drawEffect, | 986 const GrDrawEffect& drawEffect, |
| 986 const GrEffectKey& key, | 987 const GrEffectKey& key, |
| 987 const char* outputColor, | 988 const char* outputColor, |
| 988 const char* inputColor, | 989 const char* inputColor, |
| 989 const TransformedCoordsArray&, | 990 const TransformedCoordsArray&, |
| 990 const TextureSamplerArray& samplers) { | 991 const TextureSamplerArray& samplers) { |
| 991 const char *rectName; | 992 const char *rectName; |
| 992 const char *cornerRadiusName; | 993 const char *cornerRadiusName; |
| 993 const char *blurRadiusName; | 994 const char *blurRadiusName; |
| 994 | 995 |
| 995 // The proxy rect has left, top, right, and bottom edges correspond to | 996 // The proxy rect has left, top, right, and bottom edges correspond to |
| 996 // components x, y, z, and w, respectively. | 997 // components x, y, z, and w, respectively. |
| 997 | 998 |
| 998 fProxyRectUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibil
ity, | 999 fProxyRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibi
lity, |
| 999 kVec4f_GrSLType, | 1000 kVec4f_GrSLType, |
| 1000 "proxyRect", | 1001 "proxyRect", |
| 1001 &rectName); | 1002 &rectName); |
| 1002 fCornerRadiusUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visi
bility, | 1003 fCornerRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Vis
ibility, |
| 1003 kFloat_GrSLType, | 1004 kFloat_GrSLType, |
| 1004 "cornerRadius", | 1005 "cornerRadius", |
| 1005 &cornerRadiusName); | 1006 &cornerRadiusName); |
| 1006 fBlurRadiusUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibi
lity, | 1007 fBlurRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visib
ility, |
| 1007 kFloat_GrSLType, | 1008 kFloat_GrSLType, |
| 1008 "blurRadius", | 1009 "blurRadius", |
| 1009 &blurRadiusName); | 1010 &blurRadiusName); |
| 1010 const char* fragmentPos = builder->fragmentPosition(); | 1011 |
| 1012 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 1013 const char* fragmentPos = fsBuilder->fragmentPosition(); |
| 1011 | 1014 |
| 1012 // warp the fragment position to the appropriate part of the 9patch blur tex
ture | 1015 // warp the fragment position to the appropriate part of the 9patch blur tex
ture |
| 1013 | 1016 |
| 1014 builder->fsCodeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); | 1017 fsBuilder->codeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); |
| 1015 builder->fsCodeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); | 1018 fsBuilder->codeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); |
| 1016 builder->fsCodeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); | 1019 fsBuilder->codeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); |
| 1017 builder->fsCodeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); | 1020 fsBuilder->codeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); |
| 1018 | 1021 |
| 1019 builder->fsCodeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); | 1022 fsBuilder->codeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); |
| 1020 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.x = threshold;\n"); | 1023 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.x = threshold;\n"); |
| 1021 builder->fsCodeAppendf("\t\t} else if (translatedFragPos.x >= (middle.x + th
reshold)) {\n"); | 1024 fsBuilder->codeAppendf("\t\t} else if (translatedFragPos.x >= (middle.x + th
reshold)) {\n"); |
| 1022 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.x -= middle.x - 1.0;\n"); | 1025 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.x -= middle.x - 1.0;\n"); |
| 1023 builder->fsCodeAppendf("\t\t}\n"); | 1026 fsBuilder->codeAppendf("\t\t}\n"); |
| 1024 | 1027 |
| 1025 builder->fsCodeAppendf("\t\tif (translatedFragPos.y > threshold && translate
dFragPos.y < (middle.y+threshold)) {\n" ); | 1028 fsBuilder->codeAppendf("\t\tif (translatedFragPos.y > threshold && translate
dFragPos.y < (middle.y+threshold)) {\n" ); |
| 1026 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.y = threshold;\n"); | 1029 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.y = threshold;\n"); |
| 1027 builder->fsCodeAppendf("\t\t} else if (translatedFragPos.y >= (middle.y + th
reshold)) {\n"); | 1030 fsBuilder->codeAppendf("\t\t} else if (translatedFragPos.y >= (middle.y + th
reshold)) {\n"); |
| 1028 builder->fsCodeAppendf("\t\t\ttranslatedFragPos.y -= middle.y - 1.0;\n"); | 1031 fsBuilder->codeAppendf("\t\t\ttranslatedFragPos.y -= middle.y - 1.0;\n"); |
| 1029 builder->fsCodeAppendf("\t\t}\n"); | 1032 fsBuilder->codeAppendf("\t\t}\n"); |
| 1030 | 1033 |
| 1031 builder->fsCodeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n"); | 1034 fsBuilder->codeAppendf("\t\tvec2 proxyDims = vec2(2.0*threshold+1.0);\n"); |
| 1032 builder->fsCodeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n
"); | 1035 fsBuilder->codeAppendf("\t\tvec2 texCoord = translatedFragPos / proxyDims;\n
"); |
| 1033 | 1036 |
| 1034 builder->fsCodeAppendf("\t%s = ", outputColor); | 1037 fsBuilder->codeAppendf("\t%s = ", outputColor); |
| 1035 builder->fsAppendTextureLookupAndModulate(inputColor, samplers[0], "texCoord
"); | 1038 fsBuilder->appendTextureLookupAndModulate(inputColor, samplers[0], "texCoord
"); |
| 1036 builder->fsCodeAppend(";\n"); | 1039 fsBuilder->codeAppend(";\n"); |
| 1037 } | 1040 } |
| 1038 | 1041 |
| 1039 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman, | 1042 void GrGLRRectBlurEffect::setData(const GrGLProgramDataManager& pdman, |
| 1040 const GrDrawEffect& drawEffect) { | 1043 const GrDrawEffect& drawEffect) { |
| 1041 const GrRRectBlurEffect& brre = drawEffect.castEffect<GrRRectBlurEffect>(); | 1044 const GrRRectBlurEffect& brre = drawEffect.castEffect<GrRRectBlurEffect>(); |
| 1042 SkRRect rrect = brre.getRRect(); | 1045 SkRRect rrect = brre.getRRect(); |
| 1043 | 1046 |
| 1044 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f); | 1047 float blurRadius = 3.f*SkScalarCeilToScalar(brre.getSigma()-1/6.0f); |
| 1045 pdman.set1f(fBlurRadiusUniform, blurRadius); | 1048 pdman.set1f(fBlurRadiusUniform, blurRadius); |
| 1046 | 1049 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1204 } else { | 1207 } else { |
| 1205 str->append("None"); | 1208 str->append("None"); |
| 1206 } | 1209 } |
| 1207 str->append("))"); | 1210 str->append("))"); |
| 1208 } | 1211 } |
| 1209 #endif | 1212 #endif |
| 1210 | 1213 |
| 1211 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1214 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 1212 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1215 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 1213 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1216 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |