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

Side by Side Diff: src/gpu/GrOvalRenderer.cpp

Issue 1457543003: Add ShaderBuilders to EmitArgs and remove gettings from ProgBuilder. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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/GrFragmentProcessor.cpp ('k') | src/gpu/GrPathProcessor.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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrBatchFlushState.h" 10 #include "GrBatchFlushState.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 inline bool isStroked() const { return fStroke; } 91 inline bool isStroked() const { return fStroke; }
92 92
93 class GLSLProcessor : public GrGLSLGeometryProcessor { 93 class GLSLProcessor : public GrGLSLGeometryProcessor {
94 public: 94 public:
95 GLSLProcessor() 95 GLSLProcessor()
96 : fColor(GrColor_ILLEGAL) {} 96 : fColor(GrColor_ILLEGAL) {}
97 97
98 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ 98 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{
99 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>(); 99 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
100 GrGLSLGPBuilder* pb = args.fPB; 100 GrGLSLGPBuilder* pb = args.fPB;
101 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 101 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
102 102
103 // emit attributes 103 // emit attributes
104 vsBuilder->emitAttributes(ce); 104 vertBuilder->emitAttributes(ce);
105 105
106 GrGLSLVertToFrag v(kVec4f_GrSLType); 106 GrGLSLVertToFrag v(kVec4f_GrSLType);
107 args.fPB->addVarying("CircleEdge", &v); 107 args.fPB->addVarying("CircleEdge", &v);
108 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me); 108 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->f Name);
109 109
110 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
110 // setup pass through color 111 // setup pass through color
111 if (!ce.colorIgnored()) { 112 if (!ce.colorIgnored()) {
112 this->setupUniformColor(pb, args.fOutputColor, &fColorUniform); 113 this->setupUniformColor(pb, fragBuilder, args.fOutputColor, &fCo lorUniform);
113 } 114 }
114 115
115 // Setup position 116 // Setup position
116 this->setupPosition(pb, gpArgs, ce.inPosition()->fName); 117 this->setupPosition(pb, vertBuilder, gpArgs, ce.inPosition()->fName) ;
117 118
118 // emit transforms 119 // emit transforms
119 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ce.inPosition() ->fName, 120 this->emitTransforms(args.fPB,
120 ce.localMatrix(), args.fTransformsIn, args.fTra nsformsOut); 121 vertBuilder,
122 gpArgs->fPositionVar,
123 ce.inPosition()->fName,
124 ce.localMatrix(),
125 args.fTransformsIn,
126 args.fTransformsOut);
121 127
122 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 128 fragBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn());
123 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); 129 fragBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0.0, 1.0);",
124 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0. 0, 1.0);", v.fsIn()); 130 v.fsIn());
125 if (ce.isStroked()) { 131 if (ce.isStroked()) {
126 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);", 132 fragBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - % s.w), 0.0, 1.0);",
127 v.fsIn(), v.fsIn()); 133 v.fsIn(), v.fsIn());
128 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); 134 fragBuilder->codeAppend("edgeAlpha *= innerAlpha;");
129 } 135 }
130 136
131 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 137 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCovera ge);
132 } 138 }
133 139
134 static void GenKey(const GrGeometryProcessor& gp, 140 static void GenKey(const GrGeometryProcessor& gp,
135 const GrGLSLCaps&, 141 const GrGLSLCaps&,
136 GrProcessorKeyBuilder* b) { 142 GrProcessorKeyBuilder* b) {
137 const CircleEdgeEffect& ce = gp.cast<CircleEdgeEffect>(); 143 const CircleEdgeEffect& ce = gp.cast<CircleEdgeEffect>();
138 uint16_t key = ce.isStroked() ? 0x1 : 0x0; 144 uint16_t key = ce.isStroked() ? 0x1 : 0x0;
139 key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0 x2 : 0x0; 145 key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0 x2 : 0x0;
140 key |= ce.colorIgnored() ? 0x4 : 0x0; 146 key |= ce.colorIgnored() ? 0x4 : 0x0;
141 b->add32(key); 147 b->add32(key);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 inline bool isStroked() const { return fStroke; } 245 inline bool isStroked() const { return fStroke; }
240 246
241 class GLSLProcessor : public GrGLSLGeometryProcessor { 247 class GLSLProcessor : public GrGLSLGeometryProcessor {
242 public: 248 public:
243 GLSLProcessor() 249 GLSLProcessor()
244 : fColor(GrColor_ILLEGAL) {} 250 : fColor(GrColor_ILLEGAL) {}
245 251
246 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{ 252 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override{
247 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>(); 253 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
248 GrGLSLGPBuilder* pb = args.fPB; 254 GrGLSLGPBuilder* pb = args.fPB;
249 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 255 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
250 256
251 // emit attributes 257 // emit attributes
252 vsBuilder->emitAttributes(ee); 258 vertBuilder->emitAttributes(ee);
253 259
254 GrGLSLVertToFrag ellipseOffsets(kVec2f_GrSLType); 260 GrGLSLVertToFrag ellipseOffsets(kVec2f_GrSLType);
255 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets); 261 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets);
256 vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(), 262 vertBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(),
257 ee.inEllipseOffset()->fName); 263 ee.inEllipseOffset()->fName);
258 264
259 GrGLSLVertToFrag ellipseRadii(kVec4f_GrSLType); 265 GrGLSLVertToFrag ellipseRadii(kVec4f_GrSLType);
260 args.fPB->addVarying("EllipseRadii", &ellipseRadii); 266 args.fPB->addVarying("EllipseRadii", &ellipseRadii);
261 vsBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(), 267 vertBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(),
262 ee.inEllipseRadii()->fName); 268 ee.inEllipseRadii()->fName);
263 269
270 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
264 // setup pass through color 271 // setup pass through color
265 if (!ee.colorIgnored()) { 272 if (!ee.colorIgnored()) {
266 this->setupUniformColor(pb, args.fOutputColor, &fColorUniform); 273 this->setupUniformColor(pb, fragBuilder, args.fOutputColor, &fCo lorUniform);
267 } 274 }
268 275
269 // Setup position 276 // Setup position
270 this->setupPosition(pb, gpArgs, ee.inPosition()->fName); 277 this->setupPosition(pb, vertBuilder, gpArgs, ee.inPosition()->fName) ;
271 278
272 // emit transforms 279 // emit transforms
273 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition() ->fName, 280 this->emitTransforms(args.fPB,
274 ee.localMatrix(), args.fTransformsIn, args.fTra nsformsOut); 281 vertBuilder,
282 gpArgs->fPositionVar,
283 ee.inPosition()->fName,
284 ee.localMatrix(),
285 args.fTransformsIn,
286 args.fTransformsOut);
275 287
276 // for outer curve 288 // for outer curve
277 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 289 fragBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOff sets.fsIn(),
278 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse ts.fsIn(), 290 ellipseRadii.fsIn());
279 ellipseRadii.fsIn()); 291 fragBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset ) - 1.0;");
280 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 292 fragBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", elli pseRadii.fsIn());
281 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips eRadii.fsIn()); 293 fragBuilder->codeAppend("float grad_dot = dot(grad, grad);");
282 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);");
283 294
284 // avoid calling inversesqrt on zero. 295 // avoid calling inversesqrt on zero.
285 fsBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);"); 296 fragBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);");
286 fsBuilder->codeAppend("float invlen = inversesqrt(grad_dot);"); 297 fragBuilder->codeAppend("float invlen = inversesqrt(grad_dot);");
287 fsBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen, 0.0, 1.0);"); 298 fragBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen, 0. 0, 1.0);");
288 299
289 // for inner curve 300 // for inner curve
290 if (ee.isStroked()) { 301 if (ee.isStroked()) {
291 fsBuilder->codeAppendf("scaledOffset = %s*%s.zw;", 302 fragBuilder->codeAppendf("scaledOffset = %s*%s.zw;",
292 ellipseOffsets.fsIn(), ellipseRadii.fsIn( )); 303 ellipseOffsets.fsIn(), ellipseRadii.fsI n());
293 fsBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;"); 304 fragBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;");
294 fsBuilder->codeAppendf("grad = 2.0*scaledOffset*%s.zw;", 305 fragBuilder->codeAppendf("grad = 2.0*scaledOffset*%s.zw;",
295 ellipseRadii.fsIn()); 306 ellipseRadii.fsIn());
296 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 307 fragBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));" );
297 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 308 fragBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);");
298 } 309 }
299 310
300 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 311 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCovera ge);
301 } 312 }
302 313
303 static void GenKey(const GrGeometryProcessor& gp, 314 static void GenKey(const GrGeometryProcessor& gp,
304 const GrGLSLCaps&, 315 const GrGLSLCaps&,
305 GrProcessorKeyBuilder* b) { 316 GrProcessorKeyBuilder* b) {
306 const EllipseEdgeEffect& ee = gp.cast<EllipseEdgeEffect>(); 317 const EllipseEdgeEffect& ee = gp.cast<EllipseEdgeEffect>();
307 uint16_t key = ee.isStroked() ? 0x1 : 0x0; 318 uint16_t key = ee.isStroked() ? 0x1 : 0x0;
308 key |= ee.usesLocalCoords() && ee.localMatrix().hasPerspective() ? 0 x2 : 0x0; 319 key |= ee.usesLocalCoords() && ee.localMatrix().hasPerspective() ? 0 x2 : 0x0;
309 key |= ee.colorIgnored() ? 0x4 : 0x0; 320 key |= ee.colorIgnored() ? 0x4 : 0x0;
310 b->add32(key); 321 b->add32(key);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 inline Mode getMode() const { return fMode; } 425 inline Mode getMode() const { return fMode; }
415 426
416 class GLSLProcessor : public GrGLSLGeometryProcessor { 427 class GLSLProcessor : public GrGLSLGeometryProcessor {
417 public: 428 public:
418 GLSLProcessor() 429 GLSLProcessor()
419 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) {} 430 : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL) {}
420 431
421 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { 432 void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override {
422 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ; 433 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ;
423 GrGLSLGPBuilder* pb = args.fPB; 434 GrGLSLGPBuilder* pb = args.fPB;
424 GrGLSLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 435 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
425 436
426 // emit attributes 437 // emit attributes
427 vsBuilder->emitAttributes(ee); 438 vertBuilder->emitAttributes(ee);
428 439
429 GrGLSLVertToFrag offsets0(kVec2f_GrSLType); 440 GrGLSLVertToFrag offsets0(kVec2f_GrSLType);
430 args.fPB->addVarying("EllipseOffsets0", &offsets0); 441 args.fPB->addVarying("EllipseOffsets0", &offsets0);
431 vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(), 442 vertBuilder->codeAppendf("%s = %s;", offsets0.vsOut(),
432 ee.inEllipseOffsets0()->fName); 443 ee.inEllipseOffsets0()->fName);
433 444
434 GrGLSLVertToFrag offsets1(kVec2f_GrSLType); 445 GrGLSLVertToFrag offsets1(kVec2f_GrSLType);
435 args.fPB->addVarying("EllipseOffsets1", &offsets1); 446 args.fPB->addVarying("EllipseOffsets1", &offsets1);
436 vsBuilder->codeAppendf("%s = %s;", offsets1.vsOut(), 447 vertBuilder->codeAppendf("%s = %s;", offsets1.vsOut(),
437 ee.inEllipseOffsets1()->fName); 448 ee.inEllipseOffsets1()->fName);
438 449
450 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
439 // setup pass through color 451 // setup pass through color
440 if (!ee.colorIgnored()) { 452 if (!ee.colorIgnored()) {
441 this->setupUniformColor(pb, args.fOutputColor, &fColorUniform); 453 this->setupUniformColor(pb, fragBuilder, args.fOutputColor, &fCo lorUniform);
442 } 454 }
443 455
444 // Setup position 456 // Setup position
445 this->setupPosition(pb, gpArgs, ee.inPosition()->fName, ee.viewMatri x(), 457 this->setupPosition(pb,
458 vertBuilder,
459 gpArgs,
460 ee.inPosition()->fName,
461 ee.viewMatrix(),
446 &fViewMatrixUniform); 462 &fViewMatrixUniform);
447 463
448 // emit transforms 464 // emit transforms
449 this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition() ->fName, 465 this->emitTransforms(args.fPB,
450 args.fTransformsIn, args.fTransformsOut); 466 vertBuilder,
467 gpArgs->fPositionVar,
468 ee.inPosition()->fName,
469 args.fTransformsIn,
470 args.fTransformsOut);
451 471
452 GrGLSLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 472 SkAssertResult(fragBuilder->enableFeature(
453 SkAssertResult(fsBuilder->enableFeature(
454 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e)); 473 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
455 // for outer curve 474 // for outer curve
456 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn() ); 475 fragBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn ());
457 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 476 fragBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset ) - 1.0;");
458 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); 477 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn());
459 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); 478 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn());
460 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y *duvdx.y," 479 fragBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s .y*duvdx.y,"
461 " 2.0*%s.x*duvdy.x + 2.0*%s.y *duvdy.y);", 480 " 2.0*%s.x*duvdy.x + 2.0*%s .y*duvdy.y);",
462 offsets0.fsIn(), offsets0.fsIn(), offsets0.fs In(), offsets0.fsIn()); 481 offsets0.fsIn(), offsets0.fsIn(), offsets0. fsIn(), offsets0.fsIn());
463 482
464 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);"); 483 fragBuilder->codeAppend("float grad_dot = dot(grad, grad);");
465 // avoid calling inversesqrt on zero. 484 // avoid calling inversesqrt on zero.
466 fsBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);"); 485 fragBuilder->codeAppend("grad_dot = max(grad_dot, 1.0e-4);");
467 fsBuilder->codeAppend("float invlen = inversesqrt(grad_dot);"); 486 fragBuilder->codeAppend("float invlen = inversesqrt(grad_dot);");
468 if (kHairline == ee.getMode()) { 487 if (kHairline == ee.getMode()) {
469 // can probably do this with one step 488 // can probably do this with one step
470 fsBuilder->codeAppend("float edgeAlpha = clamp(1.0-test*invlen, 0.0, 1.0);"); 489 fragBuilder->codeAppend("float edgeAlpha = clamp(1.0-test*invlen , 0.0, 1.0);");
471 fsBuilder->codeAppend("edgeAlpha *= clamp(1.0+test*invlen, 0.0, 1.0);"); 490 fragBuilder->codeAppend("edgeAlpha *= clamp(1.0+test*invlen, 0.0 , 1.0);");
472 } else { 491 } else {
473 fsBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen, 0.0, 1.0);"); 492 fragBuilder->codeAppend("float edgeAlpha = clamp(0.5-test*invlen , 0.0, 1.0);");
474 } 493 }
475 494
476 // for inner curve 495 // for inner curve
477 if (kStroke == ee.getMode()) { 496 if (kStroke == ee.getMode()) {
478 fsBuilder->codeAppendf("scaledOffset = %s.xy;", offsets1.fsIn()) ; 497 fragBuilder->codeAppendf("scaledOffset = %s.xy;", offsets1.fsIn( ));
479 fsBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;"); 498 fragBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;");
480 fsBuilder->codeAppendf("duvdx = dFdx(%s);", offsets1.fsIn()); 499 fragBuilder->codeAppendf("duvdx = dFdx(%s);", offsets1.fsIn());
481 fsBuilder->codeAppendf("duvdy = dFdy(%s);", offsets1.fsIn()); 500 fragBuilder->codeAppendf("duvdy = dFdy(%s);", offsets1.fsIn());
482 fsBuilder->codeAppendf("grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y* duvdx.y," 501 fragBuilder->codeAppendf("grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s. y*duvdx.y,"
483 " 2.0*%s.x*duvdy.x + 2.0*%s.y* duvdy.y);", 502 " 2.0*%s.x*duvdy.x + 2.0*%s. y*duvdy.y);",
484 offsets1.fsIn(), offsets1.fsIn(), offsets 1.fsIn(), 503 offsets1.fsIn(), offsets1.fsIn(), offse ts1.fsIn(),
485 offsets1.fsIn()); 504 offsets1.fsIn());
486 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 505 fragBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));" );
487 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 506 fragBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0 , 1.0);");
488 } 507 }
489 508
490 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 509 fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCovera ge);
491 } 510 }
492 511
493 static void GenKey(const GrGeometryProcessor& gp, 512 static void GenKey(const GrGeometryProcessor& gp,
494 const GrGLSLCaps&, 513 const GrGLSLCaps&,
495 GrProcessorKeyBuilder* b) { 514 GrProcessorKeyBuilder* b) {
496 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>(); 515 const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffe ct>();
497 uint16_t key = ellipseEffect.getMode(); 516 uint16_t key = ellipseEffect.getMode();
498 key |= ellipseEffect.colorIgnored() << 9; 517 key |= ellipseEffect.colorIgnored() << 9;
499 key |= ComputePosKey(ellipseEffect.viewMatrix()) << 10; 518 key |= ComputePosKey(ellipseEffect.viewMatrix()) << 10;
500 b->add32(key); 519 b->add32(key);
(...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after
2047 } 2066 }
2048 2067
2049 DRAW_BATCH_TEST_DEFINE(RRectBatch) { 2068 DRAW_BATCH_TEST_DEFINE(RRectBatch) {
2050 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); 2069 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random);
2051 GrColor color = GrRandomColor(random); 2070 GrColor color = GrRandomColor(random);
2052 const SkRRect& rrect = GrTest::TestRRectSimple(random); 2071 const SkRRect& rrect = GrTest::TestRRectSimple(random);
2053 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra ndom)); 2072 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra ndom));
2054 } 2073 }
2055 2074
2056 #endif 2075 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrFragmentProcessor.cpp ('k') | src/gpu/GrPathProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698