OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
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 "GrDistanceFieldGeoProc.h" | 8 #include "GrDistanceFieldGeoProc.h" |
9 #include "GrInvariantOutput.h" | 9 #include "GrInvariantOutput.h" |
10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), | 95 vertBuilder->codeAppendf("%s = vec2(%d, %d) * %s;", st.vsOut(), |
96 atlas->width(), atlas->height(), | 96 atlas->width(), atlas->height(), |
97 dfTexEffect.inTextureCoords()->fName); | 97 dfTexEffect.inTextureCoords()->fName); |
98 | 98 |
99 // Use highp to work around aliasing issues | 99 // Use highp to work around aliasing issues |
100 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, | 100 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, |
101 kHigh_GrSLPreci
sion)); | 101 kHigh_GrSLPreci
sion)); |
102 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); | 102 fragBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); |
103 | 103 |
104 fragBuilder->codeAppend("\tfloat texColor = "); | 104 fragBuilder->codeAppend("\tfloat texColor = "); |
105 fragBuilder->appendTextureLookup(args.fSamplers[0], | 105 fragBuilder->appendTextureLookup(args.fTexSamplers[0], |
106 "uv", | 106 "uv", |
107 kVec2f_GrSLType); | 107 kVec2f_GrSLType); |
108 fragBuilder->codeAppend(".r;\n"); | 108 fragBuilder->codeAppend(".r;\n"); |
109 fragBuilder->codeAppend("\tfloat distance = " | 109 fragBuilder->codeAppend("\tfloat distance = " |
110 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFie
ldThreshold ");"); | 110 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFie
ldThreshold ");"); |
111 #ifdef SK_GAMMA_APPLY_TO_A8 | 111 #ifdef SK_GAMMA_APPLY_TO_A8 |
112 // adjust width based on gamma | 112 // adjust width based on gamma |
113 fragBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName); | 113 fragBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName); |
114 #endif | 114 #endif |
115 | 115 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag, | 333 fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
334 kVec2f_GrSLType, kDefault_G
rSLPrecision, | 334 kVec2f_GrSLType, kDefault_G
rSLPrecision, |
335 "TextureSize", &textureSize
UniName); | 335 "TextureSize", &textureSize
UniName); |
336 | 336 |
337 // Use highp to work around aliasing issues | 337 // Use highp to work around aliasing issues |
338 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, | 338 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, |
339 kHigh_GrSLPreci
sion)); | 339 kHigh_GrSLPreci
sion)); |
340 fragBuilder->codeAppendf("vec2 uv = %s;", v.fsIn()); | 340 fragBuilder->codeAppendf("vec2 uv = %s;", v.fsIn()); |
341 | 341 |
342 fragBuilder->codeAppend("float texColor = "); | 342 fragBuilder->codeAppend("float texColor = "); |
343 fragBuilder->appendTextureLookup(args.fSamplers[0], | 343 fragBuilder->appendTextureLookup(args.fTexSamplers[0], |
344 "uv", | 344 "uv", |
345 kVec2f_GrSLType); | 345 kVec2f_GrSLType); |
346 fragBuilder->codeAppend(".r;"); | 346 fragBuilder->codeAppend(".r;"); |
347 fragBuilder->codeAppend("float distance = " | 347 fragBuilder->codeAppend("float distance = " |
348 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold
");"); | 348 SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold
");"); |
349 | 349 |
350 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, | 350 fragBuilder->codeAppend(GrGLSLShaderVar::PrecisionString(args.fGLSLCaps, |
351 kHigh_GrSLPreci
sion)); | 351 kHigh_GrSLPreci
sion)); |
352 fragBuilder->codeAppendf("vec2 st = uv*%s;", textureSizeUniName); | 352 fragBuilder->codeAppendf("vec2 st = uv*%s;", textureSizeUniName); |
353 fragBuilder->codeAppend("float afwidth;"); | 353 fragBuilder->codeAppend("float afwidth;"); |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 } else { | 605 } else { |
606 fragBuilder->codeAppendf("vec2 st = %s;\n", st.fsIn()); | 606 fragBuilder->codeAppendf("vec2 st = %s;\n", st.fsIn()); |
607 | 607 |
608 fragBuilder->codeAppend("vec2 Jdx = dFdx(st);"); | 608 fragBuilder->codeAppend("vec2 Jdx = dFdx(st);"); |
609 fragBuilder->codeAppend("vec2 Jdy = dFdy(st);"); | 609 fragBuilder->codeAppend("vec2 Jdy = dFdy(st);"); |
610 fragBuilder->codeAppend("vec2 offset = delta*Jdx;"); | 610 fragBuilder->codeAppend("vec2 offset = delta*Jdx;"); |
611 } | 611 } |
612 | 612 |
613 // green is distance to uv center | 613 // green is distance to uv center |
614 fragBuilder->codeAppend("\tvec4 texColor = "); | 614 fragBuilder->codeAppend("\tvec4 texColor = "); |
615 fragBuilder->appendTextureLookup(args.fSamplers[0], "uv", kVec2f_GrSLTyp
e); | 615 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv", kVec2f_GrSL
Type); |
616 fragBuilder->codeAppend(";\n"); | 616 fragBuilder->codeAppend(";\n"); |
617 fragBuilder->codeAppend("\tvec3 distance;\n"); | 617 fragBuilder->codeAppend("\tvec3 distance;\n"); |
618 fragBuilder->codeAppend("\tdistance.y = texColor.r;\n"); | 618 fragBuilder->codeAppend("\tdistance.y = texColor.r;\n"); |
619 // red is distance to left offset | 619 // red is distance to left offset |
620 fragBuilder->codeAppend("\tvec2 uv_adjusted = uv - offset;\n"); | 620 fragBuilder->codeAppend("\tvec2 uv_adjusted = uv - offset;\n"); |
621 fragBuilder->codeAppend("\ttexColor = "); | 621 fragBuilder->codeAppend("\ttexColor = "); |
622 fragBuilder->appendTextureLookup(args.fSamplers[0], "uv_adjusted", kVec2
f_GrSLType); | 622 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kV
ec2f_GrSLType); |
623 fragBuilder->codeAppend(";\n"); | 623 fragBuilder->codeAppend(";\n"); |
624 fragBuilder->codeAppend("\tdistance.x = texColor.r;\n"); | 624 fragBuilder->codeAppend("\tdistance.x = texColor.r;\n"); |
625 // blue is distance to right offset | 625 // blue is distance to right offset |
626 fragBuilder->codeAppend("\tuv_adjusted = uv + offset;\n"); | 626 fragBuilder->codeAppend("\tuv_adjusted = uv + offset;\n"); |
627 fragBuilder->codeAppend("\ttexColor = "); | 627 fragBuilder->codeAppend("\ttexColor = "); |
628 fragBuilder->appendTextureLookup(args.fSamplers[0], "uv_adjusted", kVec2
f_GrSLType); | 628 fragBuilder->appendTextureLookup(args.fTexSamplers[0], "uv_adjusted", kV
ec2f_GrSLType); |
629 fragBuilder->codeAppend(";\n"); | 629 fragBuilder->codeAppend(";\n"); |
630 fragBuilder->codeAppend("\tdistance.z = texColor.r;\n"); | 630 fragBuilder->codeAppend("\tdistance.z = texColor.r;\n"); |
631 | 631 |
632 fragBuilder->codeAppend("\tdistance = " | 632 fragBuilder->codeAppend("\tdistance = " |
633 "vec3(" SK_DistanceFieldMultiplier ")*(distance - vec3(" SK_DistanceF
ieldThreshold"));"); | 633 "vec3(" SK_DistanceFieldMultiplier ")*(distance - vec3(" SK_DistanceF
ieldThreshold"));"); |
634 | 634 |
635 // adjust width based on gamma | 635 // adjust width based on gamma |
636 const char* distanceAdjustUniName = nullptr; | 636 const char* distanceAdjustUniName = nullptr; |
637 fDistanceAdjustUni = uniformHandler->addUniform(kFragment_GrShaderFlag, | 637 fDistanceAdjustUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
638 kVec3f_GrSLType, kDefaul
t_GrSLPrecision, | 638 kVec3f_GrSLType, kDefaul
t_GrSLPrecision, |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0
; | 788 flags |= d->fRandom->nextBool() ? kScaleOnly_DistanceFieldEffectFlag : 0
; |
789 } | 789 } |
790 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 790 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
791 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), | 791 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), |
792 GrTest::TestMatrix(d->fRandom), | 792 GrTest::TestMatrix(d->fRandom), |
793 d->fTextures[texIdx], params, | 793 d->fTextures[texIdx], params, |
794 wa, | 794 wa, |
795 flags, | 795 flags, |
796 d->fRandom->nextBool()); | 796 d->fRandom->nextBool()); |
797 } | 797 } |
OLD | NEW |