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

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

Issue 1483103003: Make onPrepareDraws const (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: merge Created 5 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/batches/GrVertexBatch.h ('k') | tests/GrPorterDuffTest.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 2014 Google Inc. 2 * Copyright 2014 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 "GrDashingEffect.h" 8 #include "GrDashingEffect.h"
9 9
10 #include "GrBatchFlushState.h" 10 #include "GrBatchFlushState.h"
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 overrides.getOverrideColorIfSet(&fGeoData[0].fColor); 309 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
310 310
311 // setup batch properties 311 // setup batch properties
312 fBatch.fColorIgnored = !overrides.readsColor(); 312 fBatch.fColorIgnored = !overrides.readsColor();
313 fBatch.fColor = fGeoData[0].fColor; 313 fBatch.fColor = fGeoData[0].fColor;
314 fBatch.fUsesLocalCoords = overrides.readsLocalCoords(); 314 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
315 fBatch.fCoverageIgnored = !overrides.readsCoverage(); 315 fBatch.fCoverageIgnored = !overrides.readsCoverage();
316 } 316 }
317 317
318 struct DashDraw { 318 struct DashDraw {
319 DashDraw(const Geometry& geo) {
320 memcpy(fPtsRot, geo.fPtsRot, sizeof(geo.fPtsRot));
321 memcpy(fIntervals, geo.fIntervals, sizeof(geo.fIntervals));
322 fPhase = geo.fPhase;
323 }
324 SkPoint fPtsRot[2];
325 SkScalar fIntervals[2];
326 SkScalar fPhase;
319 SkScalar fStartOffset; 327 SkScalar fStartOffset;
320 SkScalar fStrokeWidth; 328 SkScalar fStrokeWidth;
321 SkScalar fLineLength; 329 SkScalar fLineLength;
322 SkScalar fHalfDevStroke; 330 SkScalar fHalfDevStroke;
323 SkScalar fDevBloatX; 331 SkScalar fDevBloatX;
324 SkScalar fDevBloatY; 332 SkScalar fDevBloatY;
325 bool fLineDone; 333 bool fLineDone;
326 bool fHasStartRect; 334 bool fHasStartRect;
327 bool fHasEndRect; 335 bool fHasEndRect;
328 }; 336 };
329 337
330 void onPrepareDraws(Target* target) override { 338 void onPrepareDraws(Target* target) const override {
331 int instanceCount = fGeoData.count(); 339 int instanceCount = fGeoData.count();
332 SkPaint::Cap cap = this->cap(); 340 SkPaint::Cap cap = this->cap();
333 bool isRoundCap = SkPaint::kRound_Cap == cap; 341 bool isRoundCap = SkPaint::kRound_Cap == cap;
334 DashCap capType = isRoundCap ? kRound_DashCap : kNonRound_DashCap; 342 DashCap capType = isRoundCap ? kRound_DashCap : kNonRound_DashCap;
335 343
336 SkAutoTUnref<const GrGeometryProcessor> gp; 344 SkAutoTUnref<const GrGeometryProcessor> gp;
337 if (this->fullDash()) { 345 if (this->fullDash()) {
338 gp.reset(create_dash_gp(this->color(), this->aaMode(), capType, this ->viewMatrix(), 346 gp.reset(create_dash_gp(this->color(), this->aaMode(), capType, this ->viewMatrix(),
339 this->usesLocalCoords())); 347 this->usesLocalCoords()));
340 } else { 348 } else {
(...skipping 14 matching lines...) Expand all
355 363
356 target->initDraw(gp, this->pipeline()); 364 target->initDraw(gp, this->pipeline());
357 365
358 // useAA here means Edge AA or MSAA 366 // useAA here means Edge AA or MSAA
359 bool useAA = this->aaMode() != kBW_DashAAMode; 367 bool useAA = this->aaMode() != kBW_DashAAMode;
360 bool fullDash = this->fullDash(); 368 bool fullDash = this->fullDash();
361 369
362 // We do two passes over all of the dashes. First we setup the start, e nd, and bounds, 370 // We do two passes over all of the dashes. First we setup the start, e nd, and bounds,
363 // rectangles. We preserve all of this work in the rects / draws arrays below. Then we 371 // rectangles. We preserve all of this work in the rects / draws arrays below. Then we
364 // iterate again over these decomposed dashes to generate vertices 372 // iterate again over these decomposed dashes to generate vertices
365 SkSTArray<128, SkRect, true> rects; 373 static const int kNumStackDashes = 128;
366 SkSTArray<128, DashDraw, true> draws; 374 SkSTArray<kNumStackDashes, SkRect, true> rects;
375 SkSTArray<kNumStackDashes, DashDraw, true> draws;
367 376
368 int totalRectCount = 0; 377 int totalRectCount = 0;
369 int rectOffset = 0; 378 int rectOffset = 0;
370 rects.push_back_n(3 * instanceCount); 379 rects.push_back_n(3 * instanceCount);
371 for (int i = 0; i < instanceCount; i++) { 380 for (int i = 0; i < instanceCount; i++) {
372 Geometry& args = fGeoData[i]; 381 const Geometry& args = fGeoData[i];
382
383 DashDraw& draw = draws.push_back(args);
373 384
374 bool hasCap = SkPaint::kButt_Cap != cap && 0 != args.fSrcStrokeWidth ; 385 bool hasCap = SkPaint::kButt_Cap != cap && 0 != args.fSrcStrokeWidth ;
375 386
376 // We always want to at least stroke out half a pixel on each side i n device space 387 // We always want to at least stroke out half a pixel on each side i n device space
377 // so 0.5f / perpScale gives us this min in src space 388 // so 0.5f / perpScale gives us this min in src space
378 SkScalar halfSrcStroke = 389 SkScalar halfSrcStroke =
379 SkMaxScalar(args.fSrcStrokeWidth * 0.5f, 0.5f / args.fPerpen dicularScale); 390 SkMaxScalar(args.fSrcStrokeWidth * 0.5f, 0.5f / args.fPerpen dicularScale);
380 391
381 SkScalar strokeAdj; 392 SkScalar strokeAdj;
382 if (!hasCap) { 393 if (!hasCap) {
383 strokeAdj = 0.f; 394 strokeAdj = 0.f;
384 } else { 395 } else {
385 strokeAdj = halfSrcStroke; 396 strokeAdj = halfSrcStroke;
386 } 397 }
387 398
388 SkScalar startAdj = 0; 399 SkScalar startAdj = 0;
389 400
390 bool lineDone = false; 401 bool lineDone = false;
391 402
392 // Too simplify the algorithm, we always push back rects for start a nd end rect. 403 // Too simplify the algorithm, we always push back rects for start a nd end rect.
393 // Otherwise we'd have to track start / end rects for each individua l geometry 404 // Otherwise we'd have to track start / end rects for each individua l geometry
394 SkRect& bounds = rects[rectOffset++]; 405 SkRect& bounds = rects[rectOffset++];
395 SkRect& startRect = rects[rectOffset++]; 406 SkRect& startRect = rects[rectOffset++];
396 SkRect& endRect = rects[rectOffset++]; 407 SkRect& endRect = rects[rectOffset++];
397 408
398 bool hasStartRect = false; 409 bool hasStartRect = false;
399 // If we are using AA, check to see if we are drawing a partial dash at the start. If so 410 // If we are using AA, check to see if we are drawing a partial dash at the start. If so
400 // draw it separately here and adjust our start point accordingly 411 // draw it separately here and adjust our start point accordingly
401 if (useAA) { 412 if (useAA) {
402 if (args.fPhase > 0 && args.fPhase < args.fIntervals[0]) { 413 if (draw.fPhase > 0 && draw.fPhase < draw.fIntervals[0]) {
403 SkPoint startPts[2]; 414 SkPoint startPts[2];
404 startPts[0] = args.fPtsRot[0]; 415 startPts[0] = draw.fPtsRot[0];
405 startPts[1].fY = startPts[0].fY; 416 startPts[1].fY = startPts[0].fY;
406 startPts[1].fX = SkMinScalar(startPts[0].fX + args.fInterval s[0] - args.fPhase, 417 startPts[1].fX = SkMinScalar(startPts[0].fX + draw.fInterval s[0] - draw.fPhase,
407 args.fPtsRot[1].fX); 418 draw.fPtsRot[1].fX);
408 startRect.set(startPts, 2); 419 startRect.set(startPts, 2);
409 startRect.outset(strokeAdj, halfSrcStroke); 420 startRect.outset(strokeAdj, halfSrcStroke);
410 421
411 hasStartRect = true; 422 hasStartRect = true;
412 startAdj = args.fIntervals[0] + args.fIntervals[1] - args.fP hase; 423 startAdj = draw.fIntervals[0] + draw.fIntervals[1] - draw.fP hase;
413 } 424 }
414 } 425 }
415 426
416 // adjustments for start and end of bounding rect so we only draw da sh intervals 427 // adjustments for start and end of bounding rect so we only draw da sh intervals
417 // contained in the original line segment. 428 // contained in the original line segment.
418 startAdj += calc_start_adjustment(args.fIntervals, args.fPhase); 429 startAdj += calc_start_adjustment(draw.fIntervals, draw.fPhase);
419 if (startAdj != 0) { 430 if (startAdj != 0) {
420 args.fPtsRot[0].fX += startAdj; 431 draw.fPtsRot[0].fX += startAdj;
421 args.fPhase = 0; 432 draw.fPhase = 0;
422 } 433 }
423 SkScalar endingInterval = 0; 434 SkScalar endingInterval = 0;
424 SkScalar endAdj = calc_end_adjustment(args.fIntervals, args.fPtsRot, args.fPhase, 435 SkScalar endAdj = calc_end_adjustment(draw.fIntervals, draw.fPtsRot, draw.fPhase,
425 &endingInterval); 436 &endingInterval);
426 args.fPtsRot[1].fX -= endAdj; 437 draw.fPtsRot[1].fX -= endAdj;
427 if (args.fPtsRot[0].fX >= args.fPtsRot[1].fX) { 438 if (draw.fPtsRot[0].fX >= draw.fPtsRot[1].fX) {
428 lineDone = true; 439 lineDone = true;
429 } 440 }
430 441
431 bool hasEndRect = false; 442 bool hasEndRect = false;
432 // If we are using AA, check to see if we are drawing a partial dash at then end. If so 443 // If we are using AA, check to see if we are drawing a partial dash at then end. If so
433 // draw it separately here and adjust our end point accordingly 444 // draw it separately here and adjust our end point accordingly
434 if (useAA && !lineDone) { 445 if (useAA && !lineDone) {
435 // If we adjusted the end then we will not be drawing a partial dash at the end. 446 // If we adjusted the end then we will not be drawing a partial dash at the end.
436 // If we didn't adjust the end point then we just need to make s ure the ending 447 // If we didn't adjust the end point then we just need to make s ure the ending
437 // dash isn't a full dash 448 // dash isn't a full dash
438 if (0 == endAdj && endingInterval != args.fIntervals[0]) { 449 if (0 == endAdj && endingInterval != draw.fIntervals[0]) {
439 SkPoint endPts[2]; 450 SkPoint endPts[2];
440 endPts[1] = args.fPtsRot[1]; 451 endPts[1] = draw.fPtsRot[1];
441 endPts[0].fY = endPts[1].fY; 452 endPts[0].fY = endPts[1].fY;
442 endPts[0].fX = endPts[1].fX - endingInterval; 453 endPts[0].fX = endPts[1].fX - endingInterval;
443 454
444 endRect.set(endPts, 2); 455 endRect.set(endPts, 2);
445 endRect.outset(strokeAdj, halfSrcStroke); 456 endRect.outset(strokeAdj, halfSrcStroke);
446 457
447 hasEndRect = true; 458 hasEndRect = true;
448 endAdj = endingInterval + args.fIntervals[1]; 459 endAdj = endingInterval + draw.fIntervals[1];
449 460
450 args.fPtsRot[1].fX -= endAdj; 461 draw.fPtsRot[1].fX -= endAdj;
451 if (args.fPtsRot[0].fX >= args.fPtsRot[1].fX) { 462 if (draw.fPtsRot[0].fX >= draw.fPtsRot[1].fX) {
452 lineDone = true; 463 lineDone = true;
453 } 464 }
454 } 465 }
455 } 466 }
456 467
457 if (startAdj != 0) { 468 if (startAdj != 0) {
458 args.fPhase = 0; 469 draw.fPhase = 0;
459 } 470 }
460 471
461 // Change the dashing info from src space into device space 472 // Change the dashing info from src space into device space
462 SkScalar* devIntervals = args.fIntervals; 473 SkScalar* devIntervals = draw.fIntervals;
463 devIntervals[0] = args.fIntervals[0] * args.fParallelScale; 474 devIntervals[0] = draw.fIntervals[0] * args.fParallelScale;
464 devIntervals[1] = args.fIntervals[1] * args.fParallelScale; 475 devIntervals[1] = draw.fIntervals[1] * args.fParallelScale;
465 SkScalar devPhase = args.fPhase * args.fParallelScale; 476 SkScalar devPhase = draw.fPhase * args.fParallelScale;
466 SkScalar strokeWidth = args.fSrcStrokeWidth * args.fPerpendicularSca le; 477 SkScalar strokeWidth = args.fSrcStrokeWidth * args.fPerpendicularSca le;
467 478
468 if ((strokeWidth < 1.f && useAA) || 0.f == strokeWidth) { 479 if ((strokeWidth < 1.f && useAA) || 0.f == strokeWidth) {
469 strokeWidth = 1.f; 480 strokeWidth = 1.f;
470 } 481 }
471 482
472 SkScalar halfDevStroke = strokeWidth * 0.5f; 483 SkScalar halfDevStroke = strokeWidth * 0.5f;
473 484
474 if (SkPaint::kSquare_Cap == cap && 0 != args.fSrcStrokeWidth) { 485 if (SkPaint::kSquare_Cap == cap && 0 != args.fSrcStrokeWidth) {
475 // add cap to on interval and remove from off interval 486 // add cap to on interval and remove from off interval
476 devIntervals[0] += strokeWidth; 487 devIntervals[0] += strokeWidth;
477 devIntervals[1] -= strokeWidth; 488 devIntervals[1] -= strokeWidth;
478 } 489 }
479 SkScalar startOffset = devIntervals[1] * 0.5f + devPhase; 490 SkScalar startOffset = devIntervals[1] * 0.5f + devPhase;
480 491
481 // For EdgeAA, we bloat in X & Y for both square and round caps. 492 // For EdgeAA, we bloat in X & Y for both square and round caps.
482 // For MSAA, we don't bloat at all for square caps, and bloat in Y o nly for round caps. 493 // For MSAA, we don't bloat at all for square caps, and bloat in Y o nly for round caps.
483 SkScalar devBloatX = this->aaMode() == kEdgeAA_DashAAMode ? 0.5f : 0 .0f; 494 SkScalar devBloatX = this->aaMode() == kEdgeAA_DashAAMode ? 0.5f : 0 .0f;
484 SkScalar devBloatY = (SkPaint::kRound_Cap == cap && this->aaMode() = = kMSAA_DashAAMode) 495 SkScalar devBloatY = (SkPaint::kRound_Cap == cap && this->aaMode() = = kMSAA_DashAAMode)
485 ? 0.5f : devBloatX; 496 ? 0.5f : devBloatX;
486 497
487 SkScalar bloatX = devBloatX / args.fParallelScale; 498 SkScalar bloatX = devBloatX / args.fParallelScale;
488 SkScalar bloatY = devBloatY / args.fPerpendicularScale; 499 SkScalar bloatY = devBloatY / args.fPerpendicularScale;
489 500
490 if (devIntervals[1] <= 0.f && useAA) { 501 if (devIntervals[1] <= 0.f && useAA) {
491 // Case when we end up drawing a solid AA rect 502 // Case when we end up drawing a solid AA rect
492 // Reset the start rect to draw this single solid rect 503 // Reset the start rect to draw this single solid rect
493 // but it requires to upload a new intervals uniform so we can m imic 504 // but it requires to upload a new intervals uniform so we can m imic
494 // one giant dash 505 // one giant dash
495 args.fPtsRot[0].fX -= hasStartRect ? startAdj : 0; 506 draw.fPtsRot[0].fX -= hasStartRect ? startAdj : 0;
496 args.fPtsRot[1].fX += hasEndRect ? endAdj : 0; 507 draw.fPtsRot[1].fX += hasEndRect ? endAdj : 0;
497 startRect.set(args.fPtsRot, 2); 508 startRect.set(draw.fPtsRot, 2);
498 startRect.outset(strokeAdj, halfSrcStroke); 509 startRect.outset(strokeAdj, halfSrcStroke);
499 hasStartRect = true; 510 hasStartRect = true;
500 hasEndRect = false; 511 hasEndRect = false;
501 lineDone = true; 512 lineDone = true;
502 513
503 SkPoint devicePts[2]; 514 SkPoint devicePts[2];
504 args.fViewMatrix.mapPoints(devicePts, args.fPtsRot, 2); 515 args.fViewMatrix.mapPoints(devicePts, draw.fPtsRot, 2);
505 SkScalar lineLength = SkPoint::Distance(devicePts[0], devicePts[ 1]); 516 SkScalar lineLength = SkPoint::Distance(devicePts[0], devicePts[ 1]);
506 if (hasCap) { 517 if (hasCap) {
507 lineLength += 2.f * halfDevStroke; 518 lineLength += 2.f * halfDevStroke;
508 } 519 }
509 devIntervals[0] = lineLength; 520 devIntervals[0] = lineLength;
510 } 521 }
511 522
512 totalRectCount += !lineDone ? 1 : 0; 523 totalRectCount += !lineDone ? 1 : 0;
513 totalRectCount += hasStartRect ? 1 : 0; 524 totalRectCount += hasStartRect ? 1 : 0;
514 totalRectCount += hasEndRect ? 1 : 0; 525 totalRectCount += hasEndRect ? 1 : 0;
515 526
516 if (SkPaint::kRound_Cap == cap && 0 != args.fSrcStrokeWidth) { 527 if (SkPaint::kRound_Cap == cap && 0 != args.fSrcStrokeWidth) {
517 // need to adjust this for round caps to correctly set the dashP os attrib on 528 // need to adjust this for round caps to correctly set the dashP os attrib on
518 // vertices 529 // vertices
519 startOffset -= halfDevStroke; 530 startOffset -= halfDevStroke;
520 } 531 }
521 532
522 DashDraw& draw = draws.push_back();
523 if (!lineDone) { 533 if (!lineDone) {
524 SkPoint devicePts[2]; 534 SkPoint devicePts[2];
525 args.fViewMatrix.mapPoints(devicePts, args.fPtsRot, 2); 535 args.fViewMatrix.mapPoints(devicePts, draw.fPtsRot, 2);
526 draw.fLineLength = SkPoint::Distance(devicePts[0], devicePts[1]) ; 536 draw.fLineLength = SkPoint::Distance(devicePts[0], devicePts[1]) ;
527 if (hasCap) { 537 if (hasCap) {
528 draw.fLineLength += 2.f * halfDevStroke; 538 draw.fLineLength += 2.f * halfDevStroke;
529 } 539 }
530 540
531 bounds.set(args.fPtsRot[0].fX, args.fPtsRot[0].fY, 541 bounds.set(draw.fPtsRot[0].fX, draw.fPtsRot[0].fY,
532 args.fPtsRot[1].fX, args.fPtsRot[1].fY); 542 draw.fPtsRot[1].fX, draw.fPtsRot[1].fY);
533 bounds.outset(bloatX + strokeAdj, bloatY + halfSrcStroke); 543 bounds.outset(bloatX + strokeAdj, bloatY + halfSrcStroke);
534 } 544 }
535 545
536 if (hasStartRect) { 546 if (hasStartRect) {
537 SkASSERT(useAA); // so that we know bloatX and bloatY have been set 547 SkASSERT(useAA); // so that we know bloatX and bloatY have been set
538 startRect.outset(bloatX, bloatY); 548 startRect.outset(bloatX, bloatY);
539 } 549 }
540 550
541 if (hasEndRect) { 551 if (hasEndRect) {
542 SkASSERT(useAA); // so that we know bloatX and bloatY have been set 552 SkASSERT(useAA); // so that we know bloatX and bloatY have been set
(...skipping 16 matching lines...) Expand all
559 569
560 QuadHelper helper; 570 QuadHelper helper;
561 void* vertices = helper.init(target, gp->getVertexStride(), totalRectCou nt); 571 void* vertices = helper.init(target, gp->getVertexStride(), totalRectCou nt);
562 if (!vertices) { 572 if (!vertices) {
563 return; 573 return;
564 } 574 }
565 575
566 int curVIdx = 0; 576 int curVIdx = 0;
567 int rectIndex = 0; 577 int rectIndex = 0;
568 for (int i = 0; i < instanceCount; i++) { 578 for (int i = 0; i < instanceCount; i++) {
569 Geometry& geom = fGeoData[i]; 579 const Geometry& geom = fGeoData[i];
570 580
571 if (!draws[i].fLineDone) { 581 if (!draws[i].fLineDone) {
572 if (fullDash) { 582 if (fullDash) {
573 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv, 583 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv,
574 draws[i].fStartOffset, draws[i].fDevBloatX , 584 draws[i].fStartOffset, draws[i].fDevBloatX ,
575 draws[i].fDevBloatY, draws[i].fLineLength, 585 draws[i].fDevBloatY, draws[i].fLineLength,
576 draws[i].fHalfDevStroke, geom.fIntervals[0 ], 586 draws[i].fHalfDevStroke, draws[i].fInterva ls[0],
577 geom.fIntervals[1], draws[i].fStrokeWidth, 587 draws[i].fIntervals[1], draws[i].fStrokeWi dth,
578 capType, gp->getVertexStride()); 588 capType, gp->getVertexStride());
579 } else { 589 } else {
580 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); 590 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices);
581 SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); 591 SkASSERT(gp->getVertexStride() == sizeof(SkPoint));
582 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts); 592 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts);
583 } 593 }
584 curVIdx += 4; 594 curVIdx += 4;
585 } 595 }
586 rectIndex++; 596 rectIndex++;
587 597
588 if (draws[i].fHasStartRect) { 598 if (draws[i].fHasStartRect) {
589 if (fullDash) { 599 if (fullDash) {
590 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv, 600 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv,
591 draws[i].fStartOffset, draws[i].fDevBloatX , 601 draws[i].fStartOffset, draws[i].fDevBloatX ,
592 draws[i].fDevBloatY, geom.fIntervals[0], 602 draws[i].fDevBloatY, draws[i].fIntervals[0 ],
593 draws[i].fHalfDevStroke, geom.fIntervals[0 ], 603 draws[i].fHalfDevStroke, draws[i].fInterva ls[0],
594 geom.fIntervals[1], draws[i].fStrokeWidth, capType, 604 draws[i].fIntervals[1], draws[i].fStrokeWi dth, capType,
595 gp->getVertexStride()); 605 gp->getVertexStride());
596 } else { 606 } else {
597 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); 607 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices);
598 SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); 608 SkASSERT(gp->getVertexStride() == sizeof(SkPoint));
599 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts); 609 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts);
600 } 610 }
601 curVIdx += 4; 611 curVIdx += 4;
602 } 612 }
603 rectIndex++; 613 rectIndex++;
604 614
605 if (draws[i].fHasEndRect) { 615 if (draws[i].fHasEndRect) {
606 if (fullDash) { 616 if (fullDash) {
607 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv, 617 setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom. fSrcRotInv,
608 draws[i].fStartOffset, draws[i].fDevBloatX , 618 draws[i].fStartOffset, draws[i].fDevBloatX ,
609 draws[i].fDevBloatY, geom.fIntervals[0], 619 draws[i].fDevBloatY, draws[i].fIntervals[0 ],
610 draws[i].fHalfDevStroke, geom.fIntervals[0 ], 620 draws[i].fHalfDevStroke, draws[i].fInterva ls[0],
611 geom.fIntervals[1], draws[i].fStrokeWidth, capType, 621 draws[i].fIntervals[1], draws[i].fStrokeWi dth, capType,
612 gp->getVertexStride()); 622 gp->getVertexStride());
613 } else { 623 } else {
614 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); 624 SkPoint* verts = reinterpret_cast<SkPoint*>(vertices);
615 SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); 625 SkASSERT(gp->getVertexStride() == sizeof(SkPoint));
616 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts); 626 setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRo tInv, verts);
617 } 627 }
618 curVIdx += 4; 628 curVIdx += 4;
619 } 629 }
620 rectIndex++; 630 rectIndex++;
621 } 631 }
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 info.fIntervals = intervals; 1307 info.fIntervals = intervals;
1298 info.fCount = 2; 1308 info.fCount = 2;
1299 info.fPhase = phase; 1309 info.fPhase = phase;
1300 SkDEBUGCODE(bool success = ) strokeInfo.setDashInfo(info); 1310 SkDEBUGCODE(bool success = ) strokeInfo.setDashInfo(info);
1301 SkASSERT(success); 1311 SkASSERT(success);
1302 1312
1303 return create_batch(color, viewMatrix, pts, useAA, strokeInfo, msaaRT); 1313 return create_batch(color, viewMatrix, pts, useAA, strokeInfo, msaaRT);
1304 } 1314 }
1305 1315
1306 #endif 1316 #endif
OLDNEW
« no previous file with comments | « src/gpu/batches/GrVertexBatch.h ('k') | tests/GrPorterDuffTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698