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

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

Issue 822423004: Move most of the transform logic into the primitive processors (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tiny update Created 5 years, 11 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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrProcessor.h" 10 #include "GrProcessor.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; } 76 virtual const char* name() const SK_OVERRIDE { return "CircleEdge"; }
77 77
78 inline bool isStroked() const { return fStroke; } 78 inline bool isStroked() const { return fStroke; }
79 79
80 class GLProcessor : public GrGLGeometryProcessor { 80 class GLProcessor : public GrGLGeometryProcessor {
81 public: 81 public:
82 GLProcessor(const GrGeometryProcessor&, 82 GLProcessor(const GrGeometryProcessor&,
83 const GrBatchTracker&) 83 const GrBatchTracker&)
84 : fColor(GrColor_ILLEGAL) {} 84 : fColor(GrColor_ILLEGAL) {}
85 85
86 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 86 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
87 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>(); 87 const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
88 GrGLGPBuilder* pb = args.fPB; 88 GrGLGPBuilder* pb = args.fPB;
89 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 89 const BatchTracker& local = args.fBT.cast<BatchTracker>();
90 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 90 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
91 91
92 // emit attributes
93 vsBuilder->emitAttributes(ce);
94
92 GrGLVertToFrag v(kVec4f_GrSLType); 95 GrGLVertToFrag v(kVec4f_GrSLType);
93 args.fPB->addVarying("CircleEdge", &v); 96 args.fPB->addVarying("CircleEdge", &v);
94 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me); 97 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me);
95 98
96 // Setup pass through color 99 // Setup pass through color
97 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 100 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
98 &fColorUniform); 101 &fColorUniform);
99 102
100 // setup coord outputs
101 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ce.i nPosition()->fName);
102 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ce.inPo sition()->fName);
103
104 // setup uniform viewMatrix 103 // setup uniform viewMatrix
105 this->addUniformViewMatrix(pb); 104 this->addUniformViewMatrix(pb);
106 105
107 // setup position varying 106 // Setup position
108 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 107 const char* pos3 = "pos3";
bsalomon 2015/01/13 14:51:14 why do this and not just hardcode pos3 in the belo
109 this->uViewM(), ce.inPosition()->fName); 108 vsBuilder->codeAppendf("vec3 %s;", pos3);
109 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM( ),
110 ce.inPosition()->fName);
111
112 // emit transforms
113 this->emitTransforms(args.fPB, pos3, ce.inPosition()->fName, ce.loca lMatrix(),
114 args.fTransformsIn, args.fTransformsOut);
115
116 vsBuilder->transformToNormalizedDeviceSpace(pos3);
110 117
111 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 118 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
112 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); 119 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn());
113 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0. 0, 1.0);", v.fsIn()); 120 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0. 0, 1.0);", v.fsIn());
114 if (ce.isStroked()) { 121 if (ce.isStroked()) {
115 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);", 122 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);",
116 v.fsIn(), v.fsIn()); 123 v.fsIn(), v.fsIn());
117 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); 124 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;");
118 } 125 }
119 126
(...skipping 30 matching lines...) Expand all
150 UniformHandle fColorUniform; 157 UniformHandle fColorUniform;
151 typedef GrGLGeometryProcessor INHERITED; 158 typedef GrGLGeometryProcessor INHERITED;
152 }; 159 };
153 160
154 virtual void getGLProcessorKey(const GrBatchTracker& bt, 161 virtual void getGLProcessorKey(const GrBatchTracker& bt,
155 const GrGLCaps& caps, 162 const GrGLCaps& caps,
156 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 163 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
157 GLProcessor::GenKey(*this, bt, caps, b); 164 GLProcessor::GenKey(*this, bt, caps, b);
158 } 165 }
159 166
160 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 167 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
168 const GrGLCaps&) const SK_O VERRIDE {
161 return SkNEW_ARGS(GLProcessor, (*this, bt)); 169 return SkNEW_ARGS(GLProcessor, (*this, bt));
162 } 170 }
163 171
164 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE { 172 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE {
165 BatchTracker* local = bt->cast<BatchTracker>(); 173 BatchTracker* local = bt->cast<BatchTracker>();
166 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 174 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
167 local->fUsesLocalCoords = init.fUsesLocalCoords; 175 local->fUsesLocalCoords = init.fUsesLocalCoords;
168 } 176 }
169 177
170 bool onCanMakeEqual(const GrBatchTracker& m, 178 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; } 256 const GrAttribute* inEllipseRadii() const { return fInEllipseRadii; }
249 257
250 inline bool isStroked() const { return fStroke; } 258 inline bool isStroked() const { return fStroke; }
251 259
252 class GLProcessor : public GrGLGeometryProcessor { 260 class GLProcessor : public GrGLGeometryProcessor {
253 public: 261 public:
254 GLProcessor(const GrGeometryProcessor&, 262 GLProcessor(const GrGeometryProcessor&,
255 const GrBatchTracker&) 263 const GrBatchTracker&)
256 : fColor(GrColor_ILLEGAL) {} 264 : fColor(GrColor_ILLEGAL) {}
257 265
258 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 266 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
259 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>(); 267 const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
260 GrGLGPBuilder* pb = args.fPB; 268 GrGLGPBuilder* pb = args.fPB;
261 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 269 const BatchTracker& local = args.fBT.cast<BatchTracker>();
262 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 270 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
263 271
272 // emit attributes
273 vsBuilder->emitAttributes(ee);
274
264 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType); 275 GrGLVertToFrag ellipseOffsets(kVec2f_GrSLType);
265 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets); 276 args.fPB->addVarying("EllipseOffsets", &ellipseOffsets);
266 vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(), 277 vsBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(),
267 ee.inEllipseOffset()->fName); 278 ee.inEllipseOffset()->fName);
268 279
269 GrGLVertToFrag ellipseRadii(kVec4f_GrSLType); 280 GrGLVertToFrag ellipseRadii(kVec4f_GrSLType);
270 args.fPB->addVarying("EllipseRadii", &ellipseRadii); 281 args.fPB->addVarying("EllipseRadii", &ellipseRadii);
271 vsBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(), 282 vsBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(),
272 ee.inEllipseRadii()->fName); 283 ee.inEllipseRadii()->fName);
273 284
274 // Setup pass through color 285 // Setup pass through color
275 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 286 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
276 &fColorUniform); 287 &fColorUniform);
277 288
278 // setup coord outputs
279 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName);
280 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName);
281
282 // setup uniform viewMatrix 289 // setup uniform viewMatrix
283 this->addUniformViewMatrix(pb); 290 this->addUniformViewMatrix(pb);
284 291
285 // setup position varying 292 // Setup position
286 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 293 const char* pos3 = "pos3";
287 this->uViewM(), ee.inPosition()->fName); 294 vsBuilder->codeAppendf("vec3 %s;", pos3);
295 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM( ),
296 ee.inPosition()->fName);
297
298 // emit transforms
299 this->emitTransforms(args.fPB, pos3, ee.inPosition()->fName, ee.loca lMatrix(),
300 args.fTransformsIn, args.fTransformsOut);
301
302 vsBuilder->transformToNormalizedDeviceSpace(pos3);
288 303
289 // for outer curve 304 // for outer curve
290 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 305 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
291 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse ts.fsIn(), 306 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse ts.fsIn(),
292 ellipseRadii.fsIn()); 307 ellipseRadii.fsIn());
293 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 308 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;");
294 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips eRadii.fsIn()); 309 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips eRadii.fsIn());
295 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);"); 310 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);");
296 311
297 // avoid calling inversesqrt on zero. 312 // avoid calling inversesqrt on zero.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 359
345 typedef GrGLGeometryProcessor INHERITED; 360 typedef GrGLGeometryProcessor INHERITED;
346 }; 361 };
347 362
348 virtual void getGLProcessorKey(const GrBatchTracker& bt, 363 virtual void getGLProcessorKey(const GrBatchTracker& bt,
349 const GrGLCaps& caps, 364 const GrGLCaps& caps,
350 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 365 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
351 GLProcessor::GenKey(*this, bt, caps, b); 366 GLProcessor::GenKey(*this, bt, caps, b);
352 } 367 }
353 368
354 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 369 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
370 const GrGLCaps&) const SK_O VERRIDE {
355 return SkNEW_ARGS(GLProcessor, (*this, bt)); 371 return SkNEW_ARGS(GLProcessor, (*this, bt));
356 } 372 }
357 373
358 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE { 374 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE {
359 BatchTracker* local = bt->cast<BatchTracker>(); 375 BatchTracker* local = bt->cast<BatchTracker>();
360 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 376 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
361 local->fUsesLocalCoords = init.fUsesLocalCoords; 377 local->fUsesLocalCoords = init.fUsesLocalCoords;
362 } 378 }
363 379
364 bool onCanMakeEqual(const GrBatchTracker& m, 380 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; } 464 const GrAttribute* inEllipseOffsets1() const { return fInEllipseOffsets1; }
449 465
450 inline Mode getMode() const { return fMode; } 466 inline Mode getMode() const { return fMode; }
451 467
452 class GLProcessor : public GrGLGeometryProcessor { 468 class GLProcessor : public GrGLGeometryProcessor {
453 public: 469 public:
454 GLProcessor(const GrGeometryProcessor&, 470 GLProcessor(const GrGeometryProcessor&,
455 const GrBatchTracker&) 471 const GrBatchTracker&)
456 : fColor(GrColor_ILLEGAL) {} 472 : fColor(GrColor_ILLEGAL) {}
457 473
458 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 474 virtual void emitCode(EmitArgs& args) SK_OVERRIDE {
459 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ; 475 const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>() ;
460 GrGLGPBuilder* pb = args.fPB; 476 GrGLGPBuilder* pb = args.fPB;
461 const BatchTracker& local = args.fBT.cast<BatchTracker>(); 477 const BatchTracker& local = args.fBT.cast<BatchTracker>();
462 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 478 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();
463 479
480 // emit attributes
481 vsBuilder->emitAttributes(ee);
482
464 GrGLVertToFrag offsets0(kVec2f_GrSLType); 483 GrGLVertToFrag offsets0(kVec2f_GrSLType);
465 args.fPB->addVarying("EllipseOffsets0", &offsets0); 484 args.fPB->addVarying("EllipseOffsets0", &offsets0);
466 vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(), 485 vsBuilder->codeAppendf("%s = %s;", offsets0.vsOut(),
467 ee.inEllipseOffsets0()->fName); 486 ee.inEllipseOffsets0()->fName);
468 487
469 GrGLVertToFrag offsets1(kVec2f_GrSLType); 488 GrGLVertToFrag offsets1(kVec2f_GrSLType);
470 args.fPB->addVarying("EllipseOffsets1", &offsets1); 489 args.fPB->addVarying("EllipseOffsets1", &offsets1);
471 vsBuilder->codeAppendf("%s = %s;", offsets1.vsOut(), 490 vsBuilder->codeAppendf("%s = %s;", offsets1.vsOut(),
472 ee.inEllipseOffsets1()->fName); 491 ee.inEllipseOffsets1()->fName);
473 492
474 // Setup pass through color 493 // Setup pass through color
475 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 494 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
476 &fColorUniform); 495 &fColorUniform);
477 496
478 // setup coord outputs
479 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName);
480 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName);
481
482 // setup uniform viewMatrix 497 // setup uniform viewMatrix
483 this->addUniformViewMatrix(pb); 498 this->addUniformViewMatrix(pb);
484 499
485 // setup position varying 500 // Setup position
486 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 501 const char* pos3 = "pos3";
487 this->uViewM(), ee.inPosition()->fName); 502 vsBuilder->codeAppendf("vec3 %s;", pos3);
503 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", pos3, this->uViewM( ),
504 ee.inPosition()->fName);
505
506 // emit transforms
507 this->emitTransforms(args.fPB, pos3, ee.inPosition()->fName, ee.loca lMatrix(),
508 args.fTransformsIn, args.fTransformsOut);
509
510 vsBuilder->transformToNormalizedDeviceSpace(pos3);
488 511
489 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 512 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
490 SkAssertResult(fsBuilder->enableFeature( 513 SkAssertResult(fsBuilder->enableFeature(
491 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 514 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
492 // for outer curve 515 // for outer curve
493 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn() ); 516 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn() );
494 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 517 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;");
495 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); 518 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn());
496 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); 519 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn());
497 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y *duvdx.y," 520 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y *duvdx.y,"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 582
560 typedef GrGLGeometryProcessor INHERITED; 583 typedef GrGLGeometryProcessor INHERITED;
561 }; 584 };
562 585
563 virtual void getGLProcessorKey(const GrBatchTracker& bt, 586 virtual void getGLProcessorKey(const GrBatchTracker& bt,
564 const GrGLCaps& caps, 587 const GrGLCaps& caps,
565 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 588 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
566 GLProcessor::GenKey(*this, bt, caps, b); 589 GLProcessor::GenKey(*this, bt, caps, b);
567 } 590 }
568 591
569 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 592 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
593 const GrGLCaps&) const SK_O VERRIDE {
570 return SkNEW_ARGS(GLProcessor, (*this, bt)); 594 return SkNEW_ARGS(GLProcessor, (*this, bt));
571 } 595 }
572 596
573 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE { 597 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE {
574 BatchTracker* local = bt->cast<BatchTracker>(); 598 BatchTracker* local = bt->cast<BatchTracker>();
575 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false); 599 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
576 local->fUsesLocalCoords = init.fUsesLocalCoords; 600 local->fUsesLocalCoords = init.fUsesLocalCoords;
577 } 601 }
578 602
579 bool onCanMakeEqual(const GrBatchTracker& m, 603 bool onCanMakeEqual(const GrBatchTracker& m,
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : 1422 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 :
1399 SK_ARRAY_COUNT(gRRectIndices); 1423 SK_ARRAY_COUNT(gRRectIndices);
1400 target->setIndexSourceToBuffer(indexBuffer); 1424 target->setIndexSourceToBuffer(indexBuffer);
1401 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt, 1425 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt,
1402 &bounds); 1426 &bounds);
1403 } 1427 }
1404 1428
1405 target->resetIndexSource(); 1429 target->resetIndexSource();
1406 return true; 1430 return true;
1407 } 1431 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698