| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 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 "SkBlurMaskFilter.h" | 8 #include "SkBlurMaskFilter.h" |
| 9 #include "SkBlurMask.h" | 9 #include "SkBlurMask.h" |
| 10 #include "SkGpuBlurUtils.h" | 10 #include "SkGpuBlurUtils.h" |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 | 716 |
| 717 | 717 |
| 718 void GrGLRectBlurEffect::emitCode(EmitArgs& args) { | 718 void GrGLRectBlurEffect::emitCode(EmitArgs& args) { |
| 719 const GrRectBlurEffect& rbe = args.fFp.cast<GrRectBlurEffect>(); | 719 const GrRectBlurEffect& rbe = args.fFp.cast<GrRectBlurEffect>(); |
| 720 | 720 |
| 721 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 721 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
| 722 | 722 |
| 723 const char *rectName; | 723 const char *rectName; |
| 724 const char *profileSizeName; | 724 const char *profileSizeName; |
| 725 | 725 |
| 726 const char* precisionString = GrGLSLShaderVar::PrecisionString(args.fGLSLCap
s, rbe.precision()); | 726 SkString precisionString; |
| 727 if (args.fGLSLCaps->usesPrecisionModifiers()) { |
| 728 precisionString.printf("%s ", GrGLSLPrecisionString(rbe.precision())); |
| 729 } |
| 727 fProxyRectUniform = uniformHandler->addUniform(kFragment_GrShaderFlag, | 730 fProxyRectUniform = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 728 kVec4f_GrSLType, | 731 kVec4f_GrSLType, |
| 729 rbe.precision(), | 732 rbe.precision(), |
| 730 "proxyRect", | 733 "proxyRect", |
| 731 &rectName); | 734 &rectName); |
| 732 fProfileSizeUniform = uniformHandler->addUniform(kFragment_GrShaderFlag, | 735 fProfileSizeUniform = uniformHandler->addUniform(kFragment_GrShaderFlag, |
| 733 kFloat_GrSLType, | 736 kFloat_GrSLType, |
| 734 kDefault_GrSLPrecision, | 737 kDefault_GrSLPrecision, |
| 735 "profileSize", | 738 "profileSize", |
| 736 &profileSizeName); | 739 &profileSizeName); |
| 737 | 740 |
| 738 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; | 741 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 739 const char *fragmentPos = fragBuilder->fragmentPosition(); | 742 const char *fragmentPos = fragBuilder->fragmentPosition(); |
| 740 | 743 |
| 741 if (args.fInputColor) { | 744 if (args.fInputColor) { |
| 742 fragBuilder->codeAppendf("vec4 src=%s;", args.fInputColor); | 745 fragBuilder->codeAppendf("vec4 src=%s;", args.fInputColor); |
| 743 } else { | 746 } else { |
| 744 fragBuilder->codeAppendf("vec4 src=vec4(1);"); | 747 fragBuilder->codeAppendf("vec4 src=vec4(1);"); |
| 745 } | 748 } |
| 746 | 749 |
| 747 fragBuilder->codeAppendf("%s vec2 translatedPos = %s.xy - %s.xy;", precision
String, fragmentPos, | 750 fragBuilder->codeAppendf("%s vec2 translatedPos = %s.xy - %s.xy;", precision
String.c_str(), |
| 751 fragmentPos, rectName); |
| 752 fragBuilder->codeAppendf("%s float width = %s.z - %s.x;", precisionString.c_
str(), rectName, |
| 748 rectName); | 753 rectName); |
| 749 fragBuilder->codeAppendf("%s float width = %s.z - %s.x;", precisionString, r
ectName, rectName); | 754 fragBuilder->codeAppendf("%s float height = %s.w - %s.y;", precisionString.c
_str(), rectName, |
| 750 fragBuilder->codeAppendf("%s float height = %s.w - %s.y;", precisionString,
rectName, rectName); | 755 rectName); |
| 751 | 756 |
| 752 fragBuilder->codeAppendf("%s vec2 smallDims = vec2(width - %s, height - %s);
", precisionString, | 757 fragBuilder->codeAppendf("%s vec2 smallDims = vec2(width - %s, height - %s);
", |
| 753 profileSizeName, profileSizeName); | 758 precisionString.c_str(), profileSizeName, profileSi
zeName); |
| 754 fragBuilder->codeAppendf("%s float center = 2.0 * floor(%s/2.0 + .25) - 1.0;
", precisionString, | 759 fragBuilder->codeAppendf("%s float center = 2.0 * floor(%s/2.0 + .25) - 1.0;
", |
| 755 profileSizeName); | 760 precisionString.c_str(), profileSizeName); |
| 756 fragBuilder->codeAppendf("%s vec2 wh = smallDims - vec2(center,center);", pr
ecisionString); | 761 fragBuilder->codeAppendf("%s vec2 wh = smallDims - vec2(center,center);", |
| 762 precisionString.c_str()); |
| 757 | 763 |
| 758 OutputRectBlurProfileLookup(fragBuilder, args.fSamplers[0], "horiz_lookup",
profileSizeName, | 764 OutputRectBlurProfileLookup(fragBuilder, args.fSamplers[0], "horiz_lookup",
profileSizeName, |
| 759 "translatedPos.x", "width", "wh.x"); | 765 "translatedPos.x", "width", "wh.x"); |
| 760 OutputRectBlurProfileLookup(fragBuilder, args.fSamplers[0], "vert_lookup", p
rofileSizeName, | 766 OutputRectBlurProfileLookup(fragBuilder, args.fSamplers[0], "vert_lookup", p
rofileSizeName, |
| 761 "translatedPos.y", "height", "wh.y"); | 767 "translatedPos.y", "height", "wh.y"); |
| 762 | 768 |
| 763 fragBuilder->codeAppendf("float final = horiz_lookup * vert_lookup;"); | 769 fragBuilder->codeAppendf("float final = horiz_lookup * vert_lookup;"); |
| 764 fragBuilder->codeAppendf("%s = src * final;", args.fOutputColor); | 770 fragBuilder->codeAppendf("%s = src * final;", args.fOutputColor); |
| 765 } | 771 } |
| 766 | 772 |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1309 } else { | 1315 } else { |
| 1310 str->append("None"); | 1316 str->append("None"); |
| 1311 } | 1317 } |
| 1312 str->append("))"); | 1318 str->append("))"); |
| 1313 } | 1319 } |
| 1314 #endif | 1320 #endif |
| 1315 | 1321 |
| 1316 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1322 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 1317 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1323 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 1318 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1324 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |