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

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

Issue 772513002: create and thread batch tracker object (Closed) Base URL: https://skia.googlesource.com/skia.git@2_vertex_attr
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/GrOptDrawState.cpp ('k') | src/gpu/effects/GrBezierEffect.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 "gl/builders/GrGLProgramBuilder.h" 10 #include "gl/builders/GrGLProgramBuilder.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 84 }
85 85
86 virtual ~CircleEdgeEffect() {} 86 virtual ~CircleEdgeEffect() {}
87 87
88 static const char* Name() { return "CircleEdge"; } 88 static const char* Name() { return "CircleEdge"; }
89 89
90 inline bool isStroked() const { return fStroke; } 90 inline bool isStroked() const { return fStroke; }
91 91
92 class GLProcessor : public GrGLGeometryProcessor { 92 class GLProcessor : public GrGLGeometryProcessor {
93 public: 93 public:
94 GLProcessor(const GrBackendProcessorFactory& factory, const GrProcessor& ) 94 GLProcessor(const GrBackendProcessorFactory& factory,
95 const GrGeometryProcessor&,
96 const GrBatchTracker&)
95 : INHERITED (factory) {} 97 : INHERITED (factory) {}
96 98
97 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 99 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
98 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>(); 100 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
99 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 101 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
100 102
101 GrGLVertToFrag v(kVec4f_GrSLType); 103 GrGLVertToFrag v(kVec4f_GrSLType);
102 args.fPB->addVarying("CircleEdge", &v); 104 args.fPB->addVarying("CircleEdge", &v);
103 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me); 105 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me);
104 106
(...skipping 10 matching lines...) Expand all
115 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z - d, 0.0, 1.0); ", v.fsIn()); 117 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z - d, 0.0, 1.0); ", v.fsIn());
116 if (ce.isStroked()) { 118 if (ce.isStroked()) {
117 fsBuilder->codeAppendf("float innerAlpha = clamp(d - %s.w, 0.0, 1.0);", 119 fsBuilder->codeAppendf("float innerAlpha = clamp(d - %s.w, 0.0, 1.0);",
118 v.fsIn()); 120 v.fsIn());
119 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); 121 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;");
120 } 122 }
121 123
122 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 124 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
123 } 125 }
124 126
125 static void GenKey(const GrProcessor& processor, const GrGLCaps&, 127 static void GenKey(const GrGeometryProcessor& processor,
128 const GrBatchTracker&,
129 const GrGLCaps&,
126 GrProcessorKeyBuilder* b) { 130 GrProcessorKeyBuilder* b) {
127 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe ct>(); 131 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe ct>();
128 b->add32(circleEffect.isStroked()); 132 b->add32(circleEffect.isStroked());
129 } 133 }
130 134
131 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE {} 135 virtual void setData(const GrGLProgramDataManager&,
136 const GrGeometryProcessor&,
137 const GrBatchTracker&) SK_OVERRIDE {}
132 138
133 private: 139 private:
134 typedef GrGLGeometryProcessor INHERITED; 140 typedef GrGLGeometryProcessor INHERITED;
135 }; 141 };
136 142
137 143
138 private: 144 private:
139 CircleEdgeEffect(bool stroke) { 145 CircleEdgeEffect(bool stroke) {
140 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 146 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType));
141 fInCircleEdge = &this->addVertexAttrib(GrAttribute("inCircleEdge", 147 fInCircleEdge = &this->addVertexAttrib(GrAttribute("inCircleEdge",
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 211
206 212
207 const GrAttribute* inPosition() const { return fInPosition; } 213 const GrAttribute* inPosition() const { return fInPosition; }
208 const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; } 214 const GrAttribute* inEllipseOffset() const { return fInEllipseOffset; }
209 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; } 215 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; }
210 216
211 inline bool isStroked() const { return fStroke; } 217 inline bool isStroked() const { return fStroke; }
212 218
213 class GLProcessor : public GrGLGeometryProcessor { 219 class GLProcessor : public GrGLGeometryProcessor {
214 public: 220 public:
215 GLProcessor(const GrBackendProcessorFactory& factory, const GrProcessor& ) 221 GLProcessor(const GrBackendProcessorFactory& factory,
222 const GrGeometryProcessor&,
223 const GrBatchTracker&)
216 : INHERITED (factory) {} 224 : INHERITED (factory) {}
217 225
218 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 226 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
219 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>(); 227 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
220 228
221 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 229 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
222 230
223 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType); 231 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType);
224 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets); 232 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets);
225 vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(), 233 vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 fsBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;"); 266 fsBuilder->codeAppend("test = dot(scaledOffset, scaledOffset) - 1.0;");
259 fsBuilder->codeAppendf("grad = 2.0*scaledOffset*%s.zw;", 267 fsBuilder->codeAppendf("grad = 2.0*scaledOffset*%s.zw;",
260 ellipseRadii.fsIn()); 268 ellipseRadii.fsIn());
261 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 269 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));");
262 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 270 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);");
263 } 271 }
264 272
265 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 273 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
266 } 274 }
267 275
268 static void GenKey(const GrProcessor& processor, const GrGLCaps&, 276 static void GenKey(const GrGeometryProcessor& processor,
277 const GrBatchTracker&,
278 const GrGLCaps&,
269 GrProcessorKeyBuilder* b) { 279 GrProcessorKeyBuilder* b) {
270 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE ffect>(); 280 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE ffect>();
271 b->add32(ellipseEffect.isStroked()); 281 b->add32(ellipseEffect.isStroked());
272 } 282 }
273 283
274 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE { 284 virtual void setData(const GrGLProgramDataManager&,
285 const GrGeometryProcessor&,
286 const GrBatchTracker&) SK_OVERRIDE {
275 } 287 }
276 288
277 private: 289 private:
278 typedef GrGLGeometryProcessor INHERITED; 290 typedef GrGLGeometryProcessor INHERITED;
279 }; 291 };
280 292
281 private: 293 private:
282 EllipseEdgeEffect(bool stroke) { 294 EllipseEdgeEffect(bool stroke) {
283 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 295 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType));
284 fInEllipseOffset = &this->addVertexAttrib(GrAttribute("inEllipseOffset", 296 fInEllipseOffset = &this->addVertexAttrib(GrAttribute("inEllipseOffset",
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 static const char* Name() { return "DIEllipseEdge"; } 369 static const char* Name() { return "DIEllipseEdge"; }
358 370
359 const GrAttribute* inPosition() const { return fInPosition; } 371 const GrAttribute* inPosition() const { return fInPosition; }
360 const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; } 372 const GrAttribute* inEllipseOffsets0() const { return fInEllipseOffsets0; }
361 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } 373 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; }
362 374
363 inline Mode getMode() const { return fMode; } 375 inline Mode getMode() const { return fMode; }
364 376
365 class GLProcessor : public GrGLGeometryProcessor { 377 class GLProcessor : public GrGLGeometryProcessor {
366 public: 378 public:
367 GLProcessor(const GrBackendProcessorFactory& factory, const GrProcessor& ) 379 GLProcessor(const GrBackendProcessorFactory& factory,
380 const GrGeometryProcessor&,
381 const GrBatchTracker&)
368 : INHERITED (factory) {} 382 : INHERITED (factory) {}
369 383
370 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 384 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
371 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ; 385 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ;
372 386
373 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 387 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
374 388
375 GrGLVertToFrag offsets0(kVec2f_GrSLType); 389 GrGLVertToFrag offsets0(kVec2f_GrSLType);
376 args.fPB->addVarying("EllipseOffsets0", &offsets0); 390 args.fPB->addVarying("EllipseOffsets0", &offsets0);
377 vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(), 391 vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 " 2.0*%s.x*duvdy.x + 2.0*%s.y* duvdy.y);", 438 " 2.0*%s.x*duvdy.x + 2.0*%s.y* duvdy.y);",
425 offsets1.fsIn(), offsets1.fsIn(), offsets 1.fsIn(), 439 offsets1.fsIn(), offsets1.fsIn(), offsets 1.fsIn(),
426 offsets1.fsIn()); 440 offsets1.fsIn());
427 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));"); 441 fsBuilder->codeAppend("invlen = inversesqrt(dot(grad, grad));");
428 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);"); 442 fsBuilder->codeAppend("edgeAlpha *= clamp(0.5+test*invlen, 0.0, 1.0);");
429 } 443 }
430 444
431 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 445 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
432 } 446 }
433 447
434 static void GenKey(const GrProcessor& processor, const GrGLCaps&, 448 static void GenKey(const GrGeometryProcessor& processor,
449 const GrBatchTracker&,
450 const GrGLCaps&,
435 GrProcessorKeyBuilder* b) { 451 GrProcessorKeyBuilder* b) {
436 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE dgeEffect>(); 452 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE dgeEffect>();
437 453
438 b->add32(ellipseEffect.getMode()); 454 b->add32(ellipseEffect.getMode());
439 } 455 }
440 456
441 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE { 457 virtual void setData(const GrGLProgramDataManager&,
458 const GrGeometryProcessor&,
459 const GrBatchTracker&) SK_OVERRIDE {
442 } 460 }
443 461
444 private: 462 private:
445 typedef GrGLGeometryProcessor INHERITED; 463 typedef GrGLGeometryProcessor INHERITED;
446 }; 464 };
447 465
448 private: 466 private:
449 DIEllipseEdgeEffect(Mode mode) { 467 DIEllipseEdgeEffect(Mode mode) {
450 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 468 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType));
451 fInEllipseOffsets0 = &this->addVertexAttrib(GrAttribute("inEllipseOffset s0", 469 fInEllipseOffsets0 = &this->addVertexAttrib(GrAttribute("inEllipseOffset s0",
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : 1262 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 :
1245 SK_ARRAY_COUNT(gRRectIndices); 1263 SK_ARRAY_COUNT(gRRectIndices);
1246 target->setIndexSourceToBuffer(indexBuffer); 1264 target->setIndexSourceToBuffer(indexBuffer);
1247 target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 1 6, indexCnt, 1265 target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 1 6, indexCnt,
1248 &bounds); 1266 &bounds);
1249 } 1267 }
1250 1268
1251 target->resetIndexSource(); 1269 target->resetIndexSource();
1252 return true; 1270 return true;
1253 } 1271 }
OLDNEW
« no previous file with comments | « src/gpu/GrOptDrawState.cpp ('k') | src/gpu/effects/GrBezierEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698