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 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 fsBuilder->codeAppend("}"); | 626 fsBuilder->codeAppend("}"); |
627 fsBuilder->codeAppend("vec2 grad = vec2(dist_grad.x*Jdx.x + dist_gra
d.y*Jdy.x,"); | 627 fsBuilder->codeAppend("vec2 grad = vec2(dist_grad.x*Jdx.x + dist_gra
d.y*Jdy.x,"); |
628 fsBuilder->codeAppend(" dist_grad.x*Jdx.y + dist_gra
d.y*Jdy.y);"); | 628 fsBuilder->codeAppend(" dist_grad.x*Jdx.y + dist_gra
d.y*Jdy.y);"); |
629 | 629 |
630 // this gives us a smooth step across approximately one fragment | 630 // this gives us a smooth step across approximately one fragment |
631 fsBuilder->codeAppend("afwidth = " SK_DistanceFieldAAFactor "*length
(grad);"); | 631 fsBuilder->codeAppend("afwidth = " SK_DistanceFieldAAFactor "*length
(grad);"); |
632 } | 632 } |
633 | 633 |
634 fsBuilder->codeAppend( | 634 fsBuilder->codeAppend( |
635 "vec4 val = vec4(smoothstep(vec3(-afwidth), vec3(afwidth),
distance), 1.0);"); | 635 "vec4 val = vec4(smoothstep(vec3(-afwidth), vec3(afwidth),
distance), 1.0);"); |
| 636 // set alpha to be max of rgb coverage |
| 637 fsBuilder->codeAppend("val.a = max(max(val.r, val.g), val.b);"); |
636 | 638 |
637 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); | 639 fsBuilder->codeAppendf("%s = val;", args.fOutputCoverage); |
638 } | 640 } |
639 | 641 |
640 void setData(const GrGLProgramDataManager& pdman, | 642 void setData(const GrGLProgramDataManager& pdman, |
641 const GrPrimitiveProcessor& processor) override { | 643 const GrPrimitiveProcessor& processor) override { |
642 SkASSERT(fDistanceAdjustUni.isValid()); | 644 SkASSERT(fDistanceAdjustUni.isValid()); |
643 | 645 |
644 const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast<GrDistanceFi
eldLCDTextGeoProc>(); | 646 const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast<GrDistanceFi
eldLCDTextGeoProc>(); |
645 GrDistanceFieldLCDTextGeoProc::DistanceAdjust wa = dflcd.getDistanceAdju
st(); | 647 GrDistanceFieldLCDTextGeoProc::DistanceAdjust wa = dflcd.getDistanceAdju
st(); |
646 if (wa != fDistanceAdjust) { | 648 if (wa != fDistanceAdjust) { |
647 pdman.set3f(fDistanceAdjustUni, | 649 pdman.set3f(fDistanceAdjustUni, |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; | 750 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; |
749 flags |= d->fRandom->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; | 751 flags |= d->fRandom->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; |
750 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; | 752 flags |= d->fRandom->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; |
751 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), | 753 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(d->fRandom), |
752 GrTest::TestMatrix(d->fRandom), | 754 GrTest::TestMatrix(d->fRandom), |
753 d->fTextures[texIdx], params, | 755 d->fTextures[texIdx], params, |
754 wa, | 756 wa, |
755 flags, | 757 flags, |
756 d->fRandom->nextBool()); | 758 d->fRandom->nextBool()); |
757 } | 759 } |
OLD | NEW |