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

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

Issue 788733003: Make addUniform take a precision (Closed) Base URL: https://skia.googlesource.com/skia.git@move_prec
Patch Set: rebase Created 6 years 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
« no previous file with comments | « src/gpu/effects/GrDashingEffect.cpp ('k') | src/gpu/effects/GrMatrixConvolutionEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "GrDistanceFieldTextureEffect.h" 8 #include "GrDistanceFieldTextureEffect.h"
9 #include "GrInvariantOutput.h" 9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h" 10 #include "GrTexture.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame); 51 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
52 52
53 // setup output coords 53 // setup output coords
54 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), 54 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(),
55 dfTexEffect.inPosition()->fName); 55 dfTexEffect.inPosition()->fName);
56 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), 56 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
57 dfTexEffect.inPosition()->fName); 57 dfTexEffect.inPosition()->fName);
58 58
59 const char* textureSizeUniName = NULL; 59 const char* textureSizeUniName = NULL;
60 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 60 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
61 kVec2f_GrSLType, "TextureSize", 61 kVec2f_GrSLType, kDefault_GrSLPre cision,
62 &textureSizeUniName); 62 "TextureSize", &textureSizeUniNam e);
63 63
64 fsBuilder->codeAppend("\tvec4 texColor = "); 64 fsBuilder->codeAppend("\tvec4 texColor = ");
65 fsBuilder->appendTextureLookup(args.fSamplers[0], 65 fsBuilder->appendTextureLookup(args.fSamplers[0],
66 v.fsIn(), 66 v.fsIn(),
67 kVec2f_GrSLType); 67 kVec2f_GrSLType);
68 fsBuilder->codeAppend(";\n"); 68 fsBuilder->codeAppend(";\n");
69 fsBuilder->codeAppend("\tfloat distance = " 69 fsBuilder->codeAppend("\tfloat distance = "
70 SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceF ieldThreshold ");"); 70 SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceF ieldThreshold ");");
71 71
72 // we adjust for the effect of the transformation on the distance by usi ng 72 // we adjust for the effect of the transformation on the distance by usi ng
(...skipping 27 matching lines...) Expand all
100 // this gives us a smooth step across approximately one fragment 100 // this gives us a smooth step across approximately one fragment
101 fsBuilder->codeAppend("\tafwidth = " SK_DistanceFieldAAFactor "*leng th(grad);\n"); 101 fsBuilder->codeAppend("\tafwidth = " SK_DistanceFieldAAFactor "*leng th(grad);\n");
102 } 102 }
103 fsBuilder->codeAppend("\tfloat val = smoothstep(-afwidth, afwidth, dista nce);\n"); 103 fsBuilder->codeAppend("\tfloat val = smoothstep(-afwidth, afwidth, dista nce);\n");
104 104
105 #ifdef SK_GAMMA_APPLY_TO_A8 105 #ifdef SK_GAMMA_APPLY_TO_A8
106 // adjust based on gamma 106 // adjust based on gamma
107 const char* luminanceUniName = NULL; 107 const char* luminanceUniName = NULL;
108 // width, height, 1/(3*width) 108 // width, height, 1/(3*width)
109 fLuminanceUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visib ility, 109 fLuminanceUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visib ility,
110 kFloat_GrSLType, "Luminance", 110 kFloat_GrSLType, kDefault_GrSLPreci sion,
111 &luminanceUniName); 111 "Luminance", &luminanceUniName);
112 112
113 fsBuilder->codeAppendf("\tuv = vec2(val, %s);\n", luminanceUniName); 113 fsBuilder->codeAppendf("\tuv = vec2(val, %s);\n", luminanceUniName);
114 fsBuilder->codeAppend("\tvec4 gammaColor = "); 114 fsBuilder->codeAppend("\tvec4 gammaColor = ");
115 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 115 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
116 fsBuilder->codeAppend(";\n"); 116 fsBuilder->codeAppend(";\n");
117 fsBuilder->codeAppend("\tval = gammaColor.r;\n"); 117 fsBuilder->codeAppend("\tval = gammaColor.r;\n");
118 #endif 118 #endif
119 119
120 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); 120 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage);
121 } 121 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 dfTexEffect.inPosition()->fName); 290 dfTexEffect.inPosition()->fName);
291 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), 291 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
292 dfTexEffect.inPosition()->fName); 292 dfTexEffect.inPosition()->fName);
293 293
294 // setup position varying 294 // setup position varying
295 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 295 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
296 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame); 296 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
297 297
298 const char* textureSizeUniName = NULL; 298 const char* textureSizeUniName = NULL;
299 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 299 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
300 kVec2f_GrSLType, "TextureSize", 300 kVec2f_GrSLType, kDefault_GrSLPrec ision,
301 &textureSizeUniName); 301 "TextureSize", &textureSizeUniName );
302 302
303 fsBuilder->codeAppend("vec4 texColor = "); 303 fsBuilder->codeAppend("vec4 texColor = ");
304 fsBuilder->appendTextureLookup(args.fSamplers[0], 304 fsBuilder->appendTextureLookup(args.fSamplers[0],
305 v.fsIn(), 305 v.fsIn(),
306 kVec2f_GrSLType); 306 kVec2f_GrSLType);
307 fsBuilder->codeAppend(";"); 307 fsBuilder->codeAppend(";");
308 fsBuilder->codeAppend("float distance = " 308 fsBuilder->codeAppend("float distance = "
309 SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceFieldThresho ld ");"); 309 SK_DistanceFieldMultiplier "*(texColor.r - " SK_DistanceFieldThresho ld ");");
310 310
311 // we adjust for the effect of the transformation on the distance by usi ng 311 // we adjust for the effect of the transformation on the distance by usi ng
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), 467 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
468 dfTexEffect.inPosition()->fName); 468 dfTexEffect.inPosition()->fName);
469 469
470 // setup position varying 470 // setup position varying
471 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 471 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
472 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame); 472 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
473 473
474 const char* textureSizeUniName = NULL; 474 const char* textureSizeUniName = NULL;
475 // width, height, 1/(3*width) 475 // width, height, 1/(3*width)
476 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 476 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
477 kVec3f_GrSLType, "TextureSize", 477 kVec3f_GrSLType, kDefault_GrSLPrec ision,
478 &textureSizeUniName); 478 "TextureSize", &textureSizeUniName );
479 479
480 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 480 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
481 481
482 SkAssertResult(fsBuilder->enableFeature( 482 SkAssertResult(fsBuilder->enableFeature(
483 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); 483 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature));
484 484
485 // create LCD offset adjusted by inverse of transform 485 // create LCD offset adjusted by inverse of transform
486 fsBuilder->codeAppendf("\tvec2 uv = %s;\n", v.fsIn()); 486 fsBuilder->codeAppendf("\tvec2 uv = %s;\n", v.fsIn());
487 fsBuilder->codeAppendf("\tvec2 st = uv*%s.xy;\n", textureSizeUniName); 487 fsBuilder->codeAppendf("\tvec2 st = uv*%s.xy;\n", textureSizeUniName);
488 bool isUniformScale = !!(dfTexEffect.getFlags() & kUniformScale_Distance FieldEffectMask); 488 bool isUniformScale = !!(dfTexEffect.getFlags() & kUniformScale_Distance FieldEffectMask);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // this gives us a smooth step across approximately one fragment 548 // this gives us a smooth step across approximately one fragment
549 fsBuilder->codeAppend("\tafwidth = " SK_DistanceFieldAAFactor "*leng th(grad);\n"); 549 fsBuilder->codeAppend("\tafwidth = " SK_DistanceFieldAAFactor "*leng th(grad);\n");
550 } 550 }
551 551
552 fsBuilder->codeAppend("\tvec4 val = vec4(smoothstep(vec3(-afwidth), vec3 (afwidth), distance), 1.0);\n"); 552 fsBuilder->codeAppend("\tvec4 val = vec4(smoothstep(vec3(-afwidth), vec3 (afwidth), distance), 1.0);\n");
553 553
554 // adjust based on gamma 554 // adjust based on gamma
555 const char* textColorUniName = NULL; 555 const char* textColorUniName = NULL;
556 // width, height, 1/(3*width) 556 // width, height, 1/(3*width)
557 fTextColorUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visib ility, 557 fTextColorUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visib ility,
558 kVec3f_GrSLType, "TextColor", 558 kVec3f_GrSLType, kDefault_GrSLPreci sion,
559 &textColorUniName); 559 "TextColor", &textColorUniName);
560 560
561 fsBuilder->codeAppendf("\tuv = vec2(val.x, %s.x);\n", textColorUniName); 561 fsBuilder->codeAppendf("\tuv = vec2(val.x, %s.x);\n", textColorUniName);
562 fsBuilder->codeAppend("\tvec4 gammaColor = "); 562 fsBuilder->codeAppend("\tvec4 gammaColor = ");
563 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 563 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
564 fsBuilder->codeAppend(";\n"); 564 fsBuilder->codeAppend(";\n");
565 fsBuilder->codeAppend("\tval.x = gammaColor.r;\n"); 565 fsBuilder->codeAppend("\tval.x = gammaColor.r;\n");
566 566
567 fsBuilder->codeAppendf("\tuv = vec2(val.y, %s.y);\n", textColorUniName); 567 fsBuilder->codeAppendf("\tuv = vec2(val.y, %s.y);\n", textColorUniName);
568 fsBuilder->codeAppend("\tgammaColor = "); 568 fsBuilder->codeAppend("\tgammaColor = ");
569 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 569 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 random->nextULessThan(256), 702 random->nextULessThan(256),
703 random->nextULessThan(256)); 703 random->nextULessThan(256));
704 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 704 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
705 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 705 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
706 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 706 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
707 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params, 707 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params,
708 textures[texIdx2], params2, 708 textures[texIdx2], params2,
709 textColor, 709 textColor,
710 flags); 710 flags);
711 } 711 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDashingEffect.cpp ('k') | src/gpu/effects/GrMatrixConvolutionEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698