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

Side by Side Diff: src/gpu/batches/GrAADistanceFieldPathRenderer.cpp

Issue 1715063002: Simplify calculations in AADistanceFieldPathBatch::writePathVertices. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « src/gpu/GrTexturePriv.h ('k') | no next file » | 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 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrAADistanceFieldPathRenderer.h" 9 #include "GrAADistanceFieldPathRenderer.h"
10 10
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 SkScalar dy = pathData->fBounds.fTop; 454 SkScalar dy = pathData->fBounds.fTop;
455 SkScalar width = pathData->fBounds.width(); 455 SkScalar width = pathData->fBounds.width();
456 SkScalar height = pathData->fBounds.height(); 456 SkScalar height = pathData->fBounds.height();
457 457
458 SkScalar invScale = 1.0f / pathData->fScale; 458 SkScalar invScale = 1.0f / pathData->fScale;
459 dx *= invScale; 459 dx *= invScale;
460 dy *= invScale; 460 dy *= invScale;
461 width *= invScale; 461 width *= invScale;
462 height *= invScale; 462 height *= invScale;
463 463
464 SkFixed tx = SkIntToFixed(pathData->fAtlasLocation.fX);
465 SkFixed ty = SkIntToFixed(pathData->fAtlasLocation.fY);
466 SkFixed tw = SkScalarToFixed(pathData->fBounds.width());
467 SkFixed th = SkScalarToFixed(pathData->fBounds.height());
468
469 SkPoint* positions = reinterpret_cast<SkPoint*>(offset); 464 SkPoint* positions = reinterpret_cast<SkPoint*>(offset);
470 465
471 // vertex positions 466 // vertex positions
472 // TODO make the vertex attributes a struct 467 // TODO make the vertex attributes a struct
473 SkRect r = SkRect::MakeXYWH(dx, dy, width, height); 468 SkRect r = SkRect::MakeXYWH(dx, dy, width, height);
474 positions->setRectFan(r.left(), r.top(), r.right(), r.bottom(), vertexSt ride); 469 positions->setRectFan(r.left(), r.top(), r.right(), r.bottom(), vertexSt ride);
475 470
476 // colors 471 // colors
477 for (int i = 0; i < kVerticesPerQuad; i++) { 472 for (int i = 0; i < kVerticesPerQuad; i++) {
478 GrColor* colorPtr = (GrColor*)(offset + sizeof(SkPoint) + i * vertex Stride); 473 GrColor* colorPtr = (GrColor*)(offset + sizeof(SkPoint) + i * vertex Stride);
479 *colorPtr = color; 474 *colorPtr = color;
480 } 475 }
481 476
477 const SkScalar tx = SkIntToScalar(pathData->fAtlasLocation.fX);
478 const SkScalar ty = SkIntToScalar(pathData->fAtlasLocation.fY);
479
482 // vertex texture coords 480 // vertex texture coords
483 SkPoint* textureCoords = (SkPoint*)(offset + sizeof(SkPoint) + sizeof(Gr Color)); 481 SkPoint* textureCoords = (SkPoint*)(offset + sizeof(SkPoint) + sizeof(Gr Color));
484 textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx)), 482 textureCoords->setRectFan(tx / texture->width(),
485 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty)), 483 ty / texture->height(),
486 SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx + tw)), 484 (tx + pathData->fBounds.width()) / texture->wi dth(),
487 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty + th)), 485 (ty + pathData->fBounds.height()) / texture-> height(),
488 vertexStride); 486 vertexStride);
489 } 487 }
490 488
491 void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const { 489 void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const {
492 GrVertices vertices; 490 GrVertices vertices;
493 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads(); 491 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads();
494 vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf fer, 492 vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf fer,
495 flushInfo->fIndexBuffer, flushInfo->fVertexOffset, kVerticesPerQuad, 493 flushInfo->fIndexBuffer, flushInfo->fVertexOffset, kVerticesPerQuad,
496 kIndicesPerQuad, flushInfo->fInstancesToFlush, maxInstancesPerDraw); 494 kIndicesPerQuad, flushInfo->fInstancesToFlush, maxInstancesPerDraw);
497 target->draw(vertices); 495 target->draw(vertices);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 geometry.fAntiAlias = random->nextBool(); 643 geometry.fAntiAlias = random->nextBool();
646 geometry.fGenID = random->nextU(); 644 geometry.fGenID = random->nextU();
647 645
648 return AADistanceFieldPathBatch::Create(geometry, viewMatrix, 646 return AADistanceFieldPathBatch::Create(geometry, viewMatrix,
649 gTestStruct.fAtlas, 647 gTestStruct.fAtlas,
650 &gTestStruct.fPathCache, 648 &gTestStruct.fPathCache,
651 &gTestStruct.fPathList); 649 &gTestStruct.fPathList);
652 } 650 }
653 651
654 #endif 652 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrTexturePriv.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698