| 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" |
| (...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 | 671 |
| 672 private: | 672 private: |
| 673 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 673 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 674 | 674 |
| 675 UniformHandle fProxyRectUniform; | 675 UniformHandle fProxyRectUniform; |
| 676 UniformHandle fProfileSizeUniform; | 676 UniformHandle fProfileSizeUniform; |
| 677 | 677 |
| 678 typedef GrGLFragmentProcessor INHERITED; | 678 typedef GrGLFragmentProcessor INHERITED; |
| 679 }; | 679 }; |
| 680 | 680 |
| 681 void OutputRectBlurProfileLookup(GrGLFPFragmentBuilder* fsBuilder, | 681 void OutputRectBlurProfileLookup(GrGLFragmentBuilder* fsBuilder, |
| 682 const GrGLShaderBuilder::TextureSampler& sample
r, | 682 const GrGLShaderBuilder::TextureSampler& sample
r, |
| 683 const char *output, | 683 const char *output, |
| 684 const char *profileSize, const char *loc, | 684 const char *profileSize, const char *loc, |
| 685 const char *blurred_width, | 685 const char *blurred_width, |
| 686 const char *sharp_width) { | 686 const char *sharp_width) { |
| 687 fsBuilder->codeAppendf("\tfloat %s;\n", output); | 687 fsBuilder->codeAppendf("\tfloat %s;\n", output); |
| 688 fsBuilder->codeAppendf("\t\t{\n"); | 688 fsBuilder->codeAppendf("\t\t{\n"); |
| 689 fsBuilder->codeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/
%s;\n", | 689 fsBuilder->codeAppendf("\t\t\tfloat coord = (0.5 * (abs(2.0*%s - %s) - %s))/
%s;\n", |
| 690 loc, blurred_width, sharp_width, profileSize); | 690 loc, blurred_width, sharp_width, profileSize); |
| 691 fsBuilder->codeAppendf("\t\t\t%s = ", output); | 691 fsBuilder->codeAppendf("\t\t\t%s = ", output); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 708 kVec4f_GrSLType, | 708 kVec4f_GrSLType, |
| 709 kDefault_GrSLPrecision, | 709 kDefault_GrSLPrecision, |
| 710 "proxyRect", | 710 "proxyRect", |
| 711 &rectName); | 711 &rectName); |
| 712 fProfileSizeUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visi
bility, | 712 fProfileSizeUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visi
bility, |
| 713 kFloat_GrSLType, | 713 kFloat_GrSLType, |
| 714 kDefault_GrSLPrecision, | 714 kDefault_GrSLPrecision, |
| 715 "profileSize", | 715 "profileSize", |
| 716 &profileSizeName); | 716 &profileSizeName); |
| 717 | 717 |
| 718 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); | 718 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 719 const char *fragmentPos = fsBuilder->fragmentPosition(); | 719 const char *fragmentPos = fsBuilder->fragmentPosition(); |
| 720 | 720 |
| 721 if (inputColor) { | 721 if (inputColor) { |
| 722 fsBuilder->codeAppendf("\tvec4 src=%s;\n", inputColor); | 722 fsBuilder->codeAppendf("\tvec4 src=%s;\n", inputColor); |
| 723 } else { | 723 } else { |
| 724 fsBuilder->codeAppendf("\tvec4 src=vec4(1)\n;"); | 724 fsBuilder->codeAppendf("\tvec4 src=vec4(1)\n;"); |
| 725 } | 725 } |
| 726 | 726 |
| 727 fsBuilder->codeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); | 727 fsBuilder->codeAppendf("\tvec2 translatedPos = %s.xy - %s.xy;\n", fragmentPo
s, rectName ); |
| 728 fsBuilder->codeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; | 728 fsBuilder->codeAppendf("\tfloat width = %s.z - %s.x;\n", rectName, rectName)
; |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1053 kFloat_GrSLType, | 1053 kFloat_GrSLType, |
| 1054 kDefault_GrSLPrecision, | 1054 kDefault_GrSLPrecision, |
| 1055 "cornerRadius", | 1055 "cornerRadius", |
| 1056 &cornerRadiusName); | 1056 &cornerRadiusName); |
| 1057 fBlurRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visib
ility, | 1057 fBlurRadiusUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visib
ility, |
| 1058 kFloat_GrSLType, | 1058 kFloat_GrSLType, |
| 1059 kDefault_GrSLPrecision, | 1059 kDefault_GrSLPrecision, |
| 1060 "blurRadius", | 1060 "blurRadius", |
| 1061 &blurRadiusName); | 1061 &blurRadiusName); |
| 1062 | 1062 |
| 1063 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); | 1063 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
| 1064 const char* fragmentPos = fsBuilder->fragmentPosition(); | 1064 const char* fragmentPos = fsBuilder->fragmentPosition(); |
| 1065 | 1065 |
| 1066 // warp the fragment position to the appropriate part of the 9patch blur tex
ture | 1066 // warp the fragment position to the appropriate part of the 9patch blur tex
ture |
| 1067 | 1067 |
| 1068 fsBuilder->codeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); | 1068 fsBuilder->codeAppendf("\t\tvec2 rectCenter = (%s.xy + %s.zw)/2.0;\n", rectN
ame, rectName); |
| 1069 fsBuilder->codeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); | 1069 fsBuilder->codeAppendf("\t\tvec2 translatedFragPos = %s.xy - %s.xy;\n", frag
mentPos, rectName); |
| 1070 fsBuilder->codeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); | 1070 fsBuilder->codeAppendf("\t\tfloat threshold = %s + 2.0*%s;\n", cornerRadiusN
ame, blurRadiusName ); |
| 1071 fsBuilder->codeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); | 1071 fsBuilder->codeAppendf("\t\tvec2 middle = %s.zw - %s.xy - 2.0*threshold;\n",
rectName, rectName ); |
| 1072 | 1072 |
| 1073 fsBuilder->codeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); | 1073 fsBuilder->codeAppendf("\t\tif (translatedFragPos.x >= threshold && translat
edFragPos.x < (middle.x+threshold)) {\n" ); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 } else { | 1265 } else { |
| 1266 str->append("None"); | 1266 str->append("None"); |
| 1267 } | 1267 } |
| 1268 str->append("))"); | 1268 str->append("))"); |
| 1269 } | 1269 } |
| 1270 #endif | 1270 #endif |
| 1271 | 1271 |
| 1272 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) | 1272 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) |
| 1273 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) | 1273 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) |
| 1274 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1274 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |