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

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

Issue 761563002: First step to moving vertex attributes to the geometryProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: adding test to ignore 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/GrDistanceFieldTextureEffect.h ('k') | src/gpu/gl/GrGLGeometryProcessor.h » ('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 "gl/builders/GrGLProgramBuilder.h" 10 #include "gl/builders/GrGLProgramBuilder.h"
(...skipping 16 matching lines...) Expand all
27 : INHERITED (factory) 27 : INHERITED (factory)
28 , fTextureSize(SkISize::Make(-1,-1)) 28 , fTextureSize(SkISize::Make(-1,-1))
29 #ifdef SK_GAMMA_APPLY_TO_A8 29 #ifdef SK_GAMMA_APPLY_TO_A8
30 , fLuminance(-1.0f) 30 , fLuminance(-1.0f)
31 #endif 31 #endif
32 {} 32 {}
33 33
34 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 34 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
35 const GrDistanceFieldTextureEffect& dfTexEffect = 35 const GrDistanceFieldTextureEffect& dfTexEffect =
36 args.fGP.cast<GrDistanceFieldTextureEffect>(); 36 args.fGP.cast<GrDistanceFieldTextureEffect>();
37 SkASSERT(1 == dfTexEffect.getVertexAttribs().count());
38 37
39 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 38 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
40 SkAssertResult(fsBuilder->enableFeature( 39 SkAssertResult(fsBuilder->enableFeature(
41 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); 40 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature));
42 41
42 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
43 GrGLVertToFrag v(kVec2f_GrSLType); 43 GrGLVertToFrag v(kVec2f_GrSLType);
44 args.fPB->addVarying("TextureCoords", &v); 44 args.fPB->addVarying("TextureCoords", &v);
45 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName);
45 46
46 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 47 // setup color attribute
47 vsBuilder->codeAppendf("\t%s = %s;\n", v.vsOut(), dfTexEffect.inTextureC oords().c_str()); 48 if(dfTexEffect.inColor()) {
49 args.fPB->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutpu tColor);
50 }
48 51
49 // setup position varying 52 // setup position varying
50 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 53 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
51 vsBuilder->uViewM(), vsBuilder->inPosition()); 54 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
55
56 // setup output coords
57 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(),
58 dfTexEffect.inPosition()->fName);
59 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
60 dfTexEffect.inPosition()->fName);
52 61
53 const char* textureSizeUniName = NULL; 62 const char* textureSizeUniName = NULL;
54 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 63 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
55 kVec2f_GrSLType, "TextureSize", 64 kVec2f_GrSLType, "TextureSize",
56 &textureSizeUniName); 65 &textureSizeUniName);
57 66
58 fsBuilder->codeAppend("\tvec4 texColor = "); 67 fsBuilder->codeAppend("\tvec4 texColor = ");
59 fsBuilder->appendTextureLookup(args.fSamplers[0], 68 fsBuilder->appendTextureLookup(args.fSamplers[0],
60 v.fsIn(), 69 v.fsIn(),
61 kVec2f_GrSLType); 70 kVec2f_GrSLType);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 kFloat_GrSLType, "Luminance", 113 kFloat_GrSLType, "Luminance",
105 &luminanceUniName); 114 &luminanceUniName);
106 115
107 fsBuilder->codeAppendf("\tuv = vec2(val, %s);\n", luminanceUniName); 116 fsBuilder->codeAppendf("\tuv = vec2(val, %s);\n", luminanceUniName);
108 fsBuilder->codeAppend("\tvec4 gammaColor = "); 117 fsBuilder->codeAppend("\tvec4 gammaColor = ");
109 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 118 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
110 fsBuilder->codeAppend(";\n"); 119 fsBuilder->codeAppend(";\n");
111 fsBuilder->codeAppend("\tval = gammaColor.r;\n"); 120 fsBuilder->codeAppend("\tval = gammaColor.r;\n");
112 #endif 121 #endif
113 122
114 fsBuilder->codeAppendf("\t%s = %s;\n", args.fOutput, 123 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage);
115 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("val" )).c_str());
116 } 124 }
117 125
118 virtual void setData(const GrGLProgramDataManager& pdman, 126 virtual void setData(const GrGLProgramDataManager& pdman,
119 const GrProcessor& effect) SK_OVERRIDE { 127 const GrProcessor& effect) SK_OVERRIDE {
120 SkASSERT(fTextureSizeUni.isValid()); 128 SkASSERT(fTextureSizeUni.isValid());
121 129
122 GrTexture* texture = effect.texture(0); 130 GrTexture* texture = effect.texture(0);
123 if (texture->width() != fTextureSize.width() || 131 if (texture->width() != fTextureSize.width() ||
124 texture->height() != fTextureSize.height()) { 132 texture->height() != fTextureSize.height()) {
125 fTextureSize = SkISize::Make(texture->width(), texture->height()); 133 fTextureSize = SkISize::Make(texture->width(), texture->height());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 const GrTextureParams & gammaParams, 172 const GrTextureParams & gammaParams,
165 float luminance, 173 float luminance,
166 #endif 174 #endif
167 uint32_t flags) 175 uint32_t flags)
168 : fTextureAccess(texture, params) 176 : fTextureAccess(texture, params)
169 #ifdef SK_GAMMA_APPLY_TO_A8 177 #ifdef SK_GAMMA_APPLY_TO_A8
170 , fGammaTextureAccess(gamma, gammaParams) 178 , fGammaTextureAccess(gamma, gammaParams)
171 , fLuminance(luminance) 179 , fLuminance(luminance)
172 #endif 180 #endif
173 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 181 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
174 , fInTextureCoords(this->addVertexAttrib(GrShaderVar("inTextureCoords", 182 , fInColor(NULL) {
175 kVec2f_GrSLType,
176 GrShaderVar::kAttribute _TypeModifier))) {
177 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 183 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
184 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
185 if (flags & kColorAttr_DistanceFieldEffectFlag) {
186 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte xAttribType));
187 this->setHasVertexColor();
188 }
189 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords",
190 kVec2f_GrVertexAttribT ype));
178 this->addTextureAccess(&fTextureAccess); 191 this->addTextureAccess(&fTextureAccess);
179 #ifdef SK_GAMMA_APPLY_TO_A8 192 #ifdef SK_GAMMA_APPLY_TO_A8
180 this->addTextureAccess(&fGammaTextureAccess); 193 this->addTextureAccess(&fGammaTextureAccess);
181 #endif 194 #endif
182 } 195 }
183 196
184 bool GrDistanceFieldTextureEffect::onIsEqual(const GrGeometryProcessor& other) c onst { 197 bool GrDistanceFieldTextureEffect::onIsEqual(const GrGeometryProcessor& other) c onst {
185 const GrDistanceFieldTextureEffect& cte = other.cast<GrDistanceFieldTextureE ffect>(); 198 const GrDistanceFieldTextureEffect& cte = other.cast<GrDistanceFieldTextureE ffect>();
186 return 199 return
187 #ifdef SK_GAMMA_APPLY_TO_A8 200 #ifdef SK_GAMMA_APPLY_TO_A8
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor { 255 class GrGLDistanceFieldNoGammaTextureEffect : public GrGLGeometryProcessor {
243 public: 256 public:
244 GrGLDistanceFieldNoGammaTextureEffect(const GrBackendProcessorFactory& facto ry, 257 GrGLDistanceFieldNoGammaTextureEffect(const GrBackendProcessorFactory& facto ry,
245 const GrProcessor& effect) 258 const GrProcessor& effect)
246 : INHERITED(factory) 259 : INHERITED(factory)
247 , fTextureSize(SkISize::Make(-1, -1)) {} 260 , fTextureSize(SkISize::Make(-1, -1)) {}
248 261
249 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 262 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
250 const GrDistanceFieldNoGammaTextureEffect& dfTexEffect = 263 const GrDistanceFieldNoGammaTextureEffect& dfTexEffect =
251 args.fGP.cast<GrDistanceFieldNoGammaTextureEffect>(); 264 args.fGP.cast<GrDistanceFieldNoGammaTextureEffect>();
252 SkASSERT(1 == dfTexEffect.getVertexAttribs().count());
253 265
254 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 266 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
255 SkAssertResult(fsBuilder->enableFeature( 267 SkAssertResult(fsBuilder->enableFeature(
256 GrGLFragmentShaderBuilder::kStandardDerivat ives_GLSLFeature)); 268 GrGLFragmentShaderBuilder::kStandardDerivat ives_GLSLFeature));
257 269
270 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
258 GrGLVertToFrag v(kVec2f_GrSLType); 271 GrGLVertToFrag v(kVec2f_GrSLType);
259 args.fPB->addVarying("TextureCoords", &v); 272 args.fPB->addVarying("TextureCoords", &v);
260 273
261 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 274 // setup color attribute
262 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s().c_str()); 275 if(dfTexEffect.inColor()) {
276 args.fPB->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutpu tColor);
277 }
278
279 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName);
280
281 // setup coord outputs
282 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(),
283 dfTexEffect.inPosition()->fName);
284 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
285 dfTexEffect.inPosition()->fName);
263 286
264 // setup position varying 287 // setup position varying
265 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 288 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
266 vsBuilder->uViewM(), vsBuilder->inPosition()); 289 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
267 290
268 const char* textureSizeUniName = NULL; 291 const char* textureSizeUniName = NULL;
269 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 292 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
270 kVec2f_GrSLType, "TextureSize", 293 kVec2f_GrSLType, "TextureSize",
271 &textureSizeUniName); 294 &textureSizeUniName);
272 295
273 fsBuilder->codeAppend("vec4 texColor = "); 296 fsBuilder->codeAppend("vec4 texColor = ");
274 fsBuilder->appendTextureLookup(args.fSamplers[0], 297 fsBuilder->appendTextureLookup(args.fSamplers[0],
275 v.fsIn(), 298 v.fsIn(),
276 kVec2f_GrSLType); 299 kVec2f_GrSLType);
(...skipping 27 matching lines...) Expand all
304 fsBuilder->codeAppend("uv_grad = normalize(uv);"); 327 fsBuilder->codeAppend("uv_grad = normalize(uv);");
305 } 328 }
306 fsBuilder->codeAppend("vec2 grad = vec2(uv_grad.x*Jdx.x + uv_grad.y* Jdy.x,"); 329 fsBuilder->codeAppend("vec2 grad = vec2(uv_grad.x*Jdx.x + uv_grad.y* Jdy.x,");
307 fsBuilder->codeAppend(" uv_grad.x*Jdx.y + uv_grad.y* Jdy.y);"); 330 fsBuilder->codeAppend(" uv_grad.x*Jdx.y + uv_grad.y* Jdy.y);");
308 331
309 // this gives us a smooth step across approximately one fragment 332 // this gives us a smooth step across approximately one fragment
310 fsBuilder->codeAppend("afwidth = " SK_DistanceFieldAAFactor "*length (grad);"); 333 fsBuilder->codeAppend("afwidth = " SK_DistanceFieldAAFactor "*length (grad);");
311 } 334 }
312 fsBuilder->codeAppend("float val = smoothstep(-afwidth, afwidth, distanc e);"); 335 fsBuilder->codeAppend("float val = smoothstep(-afwidth, afwidth, distanc e);");
313 336
314 fsBuilder->codeAppendf("%s = %s;", args.fOutput, 337 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage);
315 (GrGLSLExpr4(args.fInput) * GrGLSLExpr1("val")).c_str());
316 } 338 }
317 339
318 virtual void setData(const GrGLProgramDataManager& pdman, 340 virtual void setData(const GrGLProgramDataManager& pdman,
319 const GrProcessor& effect) SK_OVERRIDE { 341 const GrProcessor& effect) SK_OVERRIDE {
320 SkASSERT(fTextureSizeUni.isValid()); 342 SkASSERT(fTextureSizeUni.isValid());
321 343
322 GrTexture* texture = effect.texture(0); 344 GrTexture* texture = effect.texture(0);
323 if (texture->width() != fTextureSize.width() || 345 if (texture->width() != fTextureSize.width() ||
324 texture->height() != fTextureSize.height()) { 346 texture->height() != fTextureSize.height()) {
325 fTextureSize = SkISize::Make(texture->width(), texture->height()); 347 fTextureSize = SkISize::Make(texture->width(), texture->height());
(...skipping 18 matching lines...) Expand all
344 typedef GrGLGeometryProcessor INHERITED; 366 typedef GrGLGeometryProcessor INHERITED;
345 }; 367 };
346 368
347 /////////////////////////////////////////////////////////////////////////////// 369 ///////////////////////////////////////////////////////////////////////////////
348 370
349 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect(GrTextu re* texture, 371 GrDistanceFieldNoGammaTextureEffect::GrDistanceFieldNoGammaTextureEffect(GrTextu re* texture,
350 const GrText ureParams& params, 372 const GrText ureParams& params,
351 uint32_t fla gs) 373 uint32_t fla gs)
352 : fTextureAccess(texture, params) 374 : fTextureAccess(texture, params)
353 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 375 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
354 , fInTextureCoords(this->addVertexAttrib(GrShaderVar("inTextureCoords", 376 , fInColor(NULL) {
355 kVec2f_GrSLType,
356 GrShaderVar::kAttribute_TypeModifier))) {
357 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 377 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
378 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
379 if (flags & kColorAttr_DistanceFieldEffectFlag) {
380 fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVerte xAttribType));
381 this->setHasVertexColor();
382 }
383 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords",
384 kVec2f_GrVertexAttribT ype));
358 this->addTextureAccess(&fTextureAccess); 385 this->addTextureAccess(&fTextureAccess);
359 } 386 }
360 387
361 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const { 388 bool GrDistanceFieldNoGammaTextureEffect::onIsEqual(const GrGeometryProcessor& o ther) const {
362 const GrDistanceFieldNoGammaTextureEffect& cte = 389 const GrDistanceFieldNoGammaTextureEffect& cte =
363 other.cast<GrDistanceFieldNoGam maTextureEffect>(); 390 other.cast<GrDistanceFieldNoGam maTextureEffect>();
364 return fFlags == cte.fFlags; 391 return fFlags == cte.fFlags;
365 } 392 }
366 393
367 void GrDistanceFieldNoGammaTextureEffect::onComputeInvariantOutput(GrInvariantOu tput* inout) const { 394 void GrDistanceFieldNoGammaTextureEffect::onComputeInvariantOutput(GrInvariantOu tput* inout) const {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 public: 431 public:
405 GrGLDistanceFieldLCDTextureEffect(const GrBackendProcessorFactory& factory, 432 GrGLDistanceFieldLCDTextureEffect(const GrBackendProcessorFactory& factory,
406 const GrProcessor&) 433 const GrProcessor&)
407 : INHERITED (factory) 434 : INHERITED (factory)
408 , fTextureSize(SkISize::Make(-1,-1)) 435 , fTextureSize(SkISize::Make(-1,-1))
409 , fTextColor(GrColor_ILLEGAL) {} 436 , fTextColor(GrColor_ILLEGAL) {}
410 437
411 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 438 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
412 const GrDistanceFieldLCDTextureEffect& dfTexEffect = 439 const GrDistanceFieldLCDTextureEffect& dfTexEffect =
413 args.fGP.cast<GrDistanceFieldLCDTextureEffect>(); 440 args.fGP.cast<GrDistanceFieldLCDTextureEffect>();
414 SkASSERT(1 == dfTexEffect.getVertexAttribs().count());
415 441
442 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
416 GrGLVertToFrag v(kVec2f_GrSLType); 443 GrGLVertToFrag v(kVec2f_GrSLType);
417 args.fPB->addVarying("TextureCoords", &v); 444 args.fPB->addVarying("TextureCoords", &v);
445 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoord s()->fName);
418 446
419 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 447 // setup coord outputs
420 vsBuilder->codeAppendf("\t%s = %s;\n", v.vsOut(), dfTexEffect.inTextureC oords().c_str()); 448 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(),
449 dfTexEffect.inPosition()->fName);
450 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(),
451 dfTexEffect.inPosition()->fName);
421 452
422 // setup position varying 453 // setup position varying
423 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() , 454 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition() ,
424 vsBuilder->uViewM(), vsBuilder->inPosition()); 455 vsBuilder->uViewM(), dfTexEffect.inPosition()->fN ame);
425 456
426 const char* textureSizeUniName = NULL; 457 const char* textureSizeUniName = NULL;
427 // width, height, 1/(3*width) 458 // width, height, 1/(3*width)
428 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility, 459 fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Vis ibility,
429 kVec3f_GrSLType, "TextureSize", 460 kVec3f_GrSLType, "TextureSize",
430 &textureSizeUniName); 461 &textureSizeUniName);
431 462
432 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); 463 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
433 464
434 SkAssertResult(fsBuilder->enableFeature( 465 SkAssertResult(fsBuilder->enableFeature(
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 552 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
522 fsBuilder->codeAppend(";\n"); 553 fsBuilder->codeAppend(";\n");
523 fsBuilder->codeAppend("\tval.y = gammaColor.r;\n"); 554 fsBuilder->codeAppend("\tval.y = gammaColor.r;\n");
524 555
525 fsBuilder->codeAppendf("\tuv = vec2(val.z, %s.z);\n", textColorUniName); 556 fsBuilder->codeAppendf("\tuv = vec2(val.z, %s.z);\n", textColorUniName);
526 fsBuilder->codeAppend("\tgammaColor = "); 557 fsBuilder->codeAppend("\tgammaColor = ");
527 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ; 558 fsBuilder->appendTextureLookup(args.fSamplers[1], "uv", kVec2f_GrSLType) ;
528 fsBuilder->codeAppend(";\n"); 559 fsBuilder->codeAppend(";\n");
529 fsBuilder->codeAppend("\tval.z = gammaColor.r;\n"); 560 fsBuilder->codeAppend("\tval.z = gammaColor.r;\n");
530 561
531 fsBuilder->codeAppendf("\t%s = %s;\n", args.fOutput, 562 fsBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage);
532 (GrGLSLExpr4(args.fInput) * GrGLSLExpr4("val")).c _str());
533 } 563 }
534 564
535 virtual void setData(const GrGLProgramDataManager& pdman, 565 virtual void setData(const GrGLProgramDataManager& pdman,
536 const GrProcessor& processor) SK_OVERRIDE { 566 const GrProcessor& processor) SK_OVERRIDE {
537 SkASSERT(fTextureSizeUni.isValid()); 567 SkASSERT(fTextureSizeUni.isValid());
538 SkASSERT(fTextColorUni.isValid()); 568 SkASSERT(fTextColorUni.isValid());
539 569
540 const GrDistanceFieldLCDTextureEffect& dfTexEffect = 570 const GrDistanceFieldLCDTextureEffect& dfTexEffect =
541 processor.cast<GrDistanceFieldLCDTextureEffect>(); 571 processor.cast<GrDistanceFieldLCDTextureEffect>();
542 GrTexture* texture = processor.texture(0); 572 GrTexture* texture = processor.texture(0);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 /////////////////////////////////////////////////////////////////////////////// 614 ///////////////////////////////////////////////////////////////////////////////
585 615
586 GrDistanceFieldLCDTextureEffect::GrDistanceFieldLCDTextureEffect( 616 GrDistanceFieldLCDTextureEffect::GrDistanceFieldLCDTextureEffect(
587 GrTexture* texture, const GrTe xtureParams& params, 617 GrTexture* texture, const GrTe xtureParams& params,
588 GrTexture* gamma, const GrText ureParams& gParams, 618 GrTexture* gamma, const GrText ureParams& gParams,
589 SkColor textColor, 619 SkColor textColor,
590 uint32_t flags) 620 uint32_t flags)
591 : fTextureAccess(texture, params) 621 : fTextureAccess(texture, params)
592 , fGammaTextureAccess(gamma, gParams) 622 , fGammaTextureAccess(gamma, gParams)
593 , fTextColor(textColor) 623 , fTextColor(textColor)
594 , fFlags(flags & kLCD_DistanceFieldEffectMask) 624 , fFlags(flags & kLCD_DistanceFieldEffectMask){
595 , fInTextureCoords(this->addVertexAttrib(GrShaderVar("inTextureCoords",
596 kVec2f_GrSLType,
597 GrShaderVar::kAttribute _TypeModifier))) {
598 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag)); 625 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag));
599 626 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVert exAttribType));
627 fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords",
628 kVec2f_GrVertexAttribT ype));
600 this->addTextureAccess(&fTextureAccess); 629 this->addTextureAccess(&fTextureAccess);
601 this->addTextureAccess(&fGammaTextureAccess); 630 this->addTextureAccess(&fGammaTextureAccess);
602 } 631 }
603 632
604 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const { 633 bool GrDistanceFieldLCDTextureEffect::onIsEqual(const GrGeometryProcessor& other ) const {
605 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>(); 634 const GrDistanceFieldLCDTextureEffect& cte = other.cast<GrDistanceFieldLCDTe xtureEffect>();
606 return (fTextColor == cte.fTextColor && 635 return (fTextColor == cte.fTextColor &&
607 fFlags == cte.fFlags); 636 fFlags == cte.fFlags);
608 } 637 }
609 638
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 random->nextULessThan(256), 674 random->nextULessThan(256),
646 random->nextULessThan(256)); 675 random->nextULessThan(256));
647 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 676 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
648 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 677 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
649 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 678 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
650 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params, 679 return GrDistanceFieldLCDTextureEffect::Create(textures[texIdx], params,
651 textures[texIdx2], params2, 680 textures[texIdx2], params2,
652 textColor, 681 textColor,
653 flags); 682 flags);
654 } 683 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDistanceFieldTextureEffect.h ('k') | src/gpu/gl/GrGLGeometryProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698