Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: src/gpu/effects/GrDistanceFieldGeoProc.cpp

Issue 1339213004: On gpu, use max(r,g,b) for coverage alpha in LCD and update lcd blend gm. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« gm/lcdblendmodes.cpp ('K') | « src/gpu/effects/GrBitmapTextGeoProc.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698