| 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 |