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

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

Issue 511593004: Make setVertexAttribs in GrDrawState take a stride parameter. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 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 "GrBitmapTextContext.h" 8 #include "GrBitmapTextContext.h"
9 #include "GrAtlas.h" 9 #include "GrAtlas.h"
10 #include "GrDrawTarget.h" 10 #include "GrDrawTarget.h"
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 } 521 }
522 522
523 bool useColorVerts = kA8_GrMaskFormat == fStrike->getMaskFormat(); 523 bool useColorVerts = kA8_GrMaskFormat == fStrike->getMaskFormat();
524 524
525 if (NULL == fVertices) { 525 if (NULL == fVertices) {
526 // If we need to reserve vertices allow the draw target to suggest 526 // If we need to reserve vertices allow the draw target to suggest
527 // a number of verts to reserve and whether to perform a flush. 527 // a number of verts to reserve and whether to perform a flush.
528 fMaxVertices = kMinRequestedVerts; 528 fMaxVertices = kMinRequestedVerts;
529 if (useColorVerts) { 529 if (useColorVerts) {
530 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorAttri bs>( 530 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorAttri bs>(
531 SK_ARRAY_COUNT(gTextVertexWithColorAttribs)); 531 SK_ARRAY_COUNT(gTextVertexWithColorAttribs), 2 * sizeof(SkPoint) + sizeof(GrColor));
bsalomon 2014/08/27 17:46:27 Maybe capture these in some static consts with gTe
egdaniel 2014/08/27 18:33:55 Done.
532 } else { 532 } else {
533 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>( 533 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>(
534 SK_ARRAY_COUNT(gTextVertexAttribs)); 534 SK_ARRAY_COUNT(gTextVertexAttribs), 2 * sizeof(SkPoint));
535 } 535 }
536 bool flush = fDrawTarget->geometryHints(&fMaxVertices, NULL); 536 bool flush = fDrawTarget->geometryHints(&fMaxVertices, NULL);
537 if (flush) { 537 if (flush) {
538 this->flushGlyphs(); 538 this->flushGlyphs();
539 fContext->flush(); 539 fContext->flush();
540 if (useColorVerts) { 540 if (useColorVerts) {
541 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorA ttribs>( 541 fDrawTarget->drawState()->setVertexAttribs<gTextVertexWithColorA ttribs>(
542 SK_ARRAY_COUNT(gTextVertexWithColorAttribs)); 542 SK_ARRAY_COUNT(gTextVertexWithColorAttribs), 2 * sizeof(SkPo int) + sizeof(GrColor));
543 } else { 543 } else {
544 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>( 544 fDrawTarget->drawState()->setVertexAttribs<gTextVertexAttribs>(
545 SK_ARRAY_COUNT(gTextVertexAttribs)); 545 SK_ARRAY_COUNT(gTextVertexAttribs), 2 * sizeof(SkPoint));
546 } 546 }
547 } 547 }
548 fMaxVertices = kDefaultRequestedVerts; 548 fMaxVertices = kDefaultRequestedVerts;
549 // ignore return, no point in flushing again. 549 // ignore return, no point in flushing again.
550 fDrawTarget->geometryHints(&fMaxVertices, NULL); 550 fDrawTarget->geometryHints(&fMaxVertices, NULL);
551 551
552 int maxQuadVertices = 4 * fContext->getQuadIndexBuffer()->maxQuads(); 552 int maxQuadVertices = 4 * fContext->getQuadIndexBuffer()->maxQuads();
553 if (fMaxVertices < kMinRequestedVerts) { 553 if (fMaxVertices < kMinRequestedVerts) {
554 fMaxVertices = kDefaultRequestedVerts; 554 fMaxVertices = kDefaultRequestedVerts;
555 } else if (fMaxVertices > maxQuadVertices) { 555 } else if (fMaxVertices > maxQuadVertices) {
(...skipping 14 matching lines...) Expand all
570 r.fLeft = SkFixedToFloat(vx); 570 r.fLeft = SkFixedToFloat(vx);
571 r.fTop = SkFixedToFloat(vy); 571 r.fTop = SkFixedToFloat(vy);
572 r.fRight = SkFixedToFloat(vx + width); 572 r.fRight = SkFixedToFloat(vx + width);
573 r.fBottom = SkFixedToFloat(vy + height); 573 r.fBottom = SkFixedToFloat(vy + height);
574 574
575 fVertexBounds.growToInclude(r); 575 fVertexBounds.growToInclude(r);
576 576
577 size_t vertSize = useColorVerts ? (2 * sizeof(SkPoint) + sizeof(GrColor)) : 577 size_t vertSize = useColorVerts ? (2 * sizeof(SkPoint) + sizeof(GrColor)) :
578 (2 * sizeof(SkPoint)); 578 (2 * sizeof(SkPoint));
579 579
580 SkASSERT(vertSize == fDrawTarget->getDrawState().getVertexSize()); 580 SkASSERT(vertSize == fDrawTarget->getDrawState().getVertexStride());
581 581
582 SkPoint* positions = reinterpret_cast<SkPoint*>( 582 SkPoint* positions = reinterpret_cast<SkPoint*>(
583 reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex); 583 reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex);
584 positions->setRectFan(r.fLeft, r.fTop, r.fRight, r.fBottom, vertSize); 584 positions->setRectFan(r.fLeft, r.fTop, r.fRight, r.fBottom, vertSize);
585 585
586 // The texture coords are last in both the with and without color vertex lay outs. 586 // The texture coords are last in both the with and without color vertex lay outs.
587 SkPoint* textureCoords = reinterpret_cast<SkPoint*>( 587 SkPoint* textureCoords = reinterpret_cast<SkPoint*>(
588 reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkPoint)) ; 588 reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkPoint)) ;
589 textureCoords->setRectFan(SkFixedToFloat(texture->normalizeFixedX(tx)), 589 textureCoords->setRectFan(SkFixedToFloat(texture->normalizeFixedX(tx)),
590 SkFixedToFloat(texture->normalizeFixedY(ty)), 590 SkFixedToFloat(texture->normalizeFixedY(ty)),
591 SkFixedToFloat(texture->normalizeFixedX(tx + width )), 591 SkFixedToFloat(texture->normalizeFixedX(tx + width )),
592 SkFixedToFloat(texture->normalizeFixedY(ty + heigh t)), 592 SkFixedToFloat(texture->normalizeFixedY(ty + heigh t)),
593 vertSize); 593 vertSize);
594 if (useColorVerts) { 594 if (useColorVerts) {
595 if (0xFF == GrColorUnpackA(fPaint.getColor())) { 595 if (0xFF == GrColorUnpackA(fPaint.getColor())) {
596 fDrawTarget->drawState()->setHint(GrDrawState::kVertexColorsAreOpaqu e_Hint, true); 596 fDrawTarget->drawState()->setHint(GrDrawState::kVertexColorsAreOpaqu e_Hint, true);
597 } 597 }
598 // color comes after position. 598 // color comes after position.
599 GrColor* colors = reinterpret_cast<GrColor*>(positions + 1); 599 GrColor* colors = reinterpret_cast<GrColor*>(positions + 1);
600 for (int i = 0; i < 4; ++i) { 600 for (int i = 0; i < 4; ++i) {
601 *colors = fPaint.getColor(); 601 *colors = fPaint.getColor();
602 colors = reinterpret_cast<GrColor*>(reinterpret_cast<intptr_t>(colors ) + vertSize); 602 colors = reinterpret_cast<GrColor*>(reinterpret_cast<intptr_t>(colors ) + vertSize);
603 } 603 }
604 } 604 }
605 fCurrVertex += 4; 605 fCurrVertex += 4;
606 } 606 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698