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

Unified Diff: src/gpu/GrAADistanceFieldPathRenderer.cpp

Issue 917373002: Use uint16s for texture coordinates when rendering text. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase to ToT Created 5 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 side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrAADistanceFieldPathRenderer.cpp
diff --git a/src/gpu/GrAADistanceFieldPathRenderer.cpp b/src/gpu/GrAADistanceFieldPathRenderer.cpp
index f2d618efcde2a3116ceef6364325a39213531139..1b2c36fe22d0bffdf018c65387e0d8c11ddd5054 100755
--- a/src/gpu/GrAADistanceFieldPathRenderer.cpp
+++ b/src/gpu/GrAADistanceFieldPathRenderer.cpp
@@ -19,10 +19,10 @@
#include "SkDistanceFieldGen.h"
#include "SkRTConf.h"
-#define ATLAS_TEXTURE_WIDTH 1024
+#define ATLAS_TEXTURE_WIDTH 1024
#define ATLAS_TEXTURE_HEIGHT 2048
-#define PLOT_WIDTH 256
-#define PLOT_HEIGHT 256
+#define PLOT_WIDTH 256
+#define PLOT_HEIGHT 256
#define NUM_PLOTS_X (ATLAS_TEXTURE_WIDTH / PLOT_WIDTH)
#define NUM_PLOTS_Y (ATLAS_TEXTURE_HEIGHT / PLOT_HEIGHT)
@@ -342,39 +342,38 @@ bool GrAADistanceFieldPathRenderer::internalDrawPath(GrDrawTarget* target,
bool success = target->reserveVertexAndIndexSpace(4,
fCachedGeometryProcessor->getVertexStride(),
0, &vertices, NULL);
- SkASSERT(fCachedGeometryProcessor->getVertexStride() == 2 * sizeof(SkPoint));
+ SkASSERT(fCachedGeometryProcessor->getVertexStride() == sizeof(SkPoint) + sizeof(SkIPoint16));
GrAlwaysAssert(success);
SkScalar dx = pathData->fBounds.fLeft;
SkScalar dy = pathData->fBounds.fTop;
robertphillips 2015/02/13 16:10:41 round_out_WH ? comment ? Would it not be better to
jvanverth1 2015/02/13 19:58:56 Rounding out the bounds seems to add an extra texe
- SkScalar width = pathData->fBounds.width();
- SkScalar height = pathData->fBounds.height();
+ int iwidth = static_cast<int>(pathData->fBounds.width() + 0.99f);
+ int iheight = static_cast<int>(pathData->fBounds.height() + 0.99f);
+ SkScalar width = iwidth;
+ SkScalar height = iheight;
SkScalar invScale = 1.0f/pathData->fScale;
dx *= invScale;
dy *= invScale;
width *= invScale;
height *= invScale;
-
- SkFixed tx = SkIntToFixed(pathData->fAtlasLocation.fX);
- SkFixed ty = SkIntToFixed(pathData->fAtlasLocation.fY);
- SkFixed tw = SkScalarToFixed(pathData->fBounds.width());
- SkFixed th = SkScalarToFixed(pathData->fBounds.height());
-
+
+ int u0 = pathData->fAtlasLocation.fX;
+ int v0 = pathData->fAtlasLocation.fY;
+ int u1 = u0 + iwidth;
+ int v1 = v0 + iheight;
// vertex positions
SkRect r = SkRect::MakeXYWH(dx, dy, width, height);
- size_t vertSize = 2 * sizeof(SkPoint);
+ size_t vertSize = sizeof(SkPoint) + sizeof(SkIPoint16);
SkPoint* positions = reinterpret_cast<SkPoint*>(vertices);
positions->setRectFan(r.left(), r.top(), r.right(), r.bottom(), vertSize);
// vertex texture coords
- intptr_t intPtr = reinterpret_cast<intptr_t>(positions);
- SkPoint* textureCoords = reinterpret_cast<SkPoint*>(intPtr + vertSize - sizeof(SkPoint));
- textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx + tw)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + th)),
- vertSize);
+ intptr_t textureCoords = reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkIPoint16);
+ ((SkIPoint16*)(textureCoords + 0 * vertSize))->set(u0, v0);
+ ((SkIPoint16*)(textureCoords + 1 * vertSize))->set(u0, v1);
+ ((SkIPoint16*)(textureCoords + 2 * vertSize))->set(u1, v1);
+ ((SkIPoint16*)(textureCoords + 3 * vertSize))->set(u1, v0);
viewMatrix.mapRect(&r);
target->setIndexSourceToBuffer(fContext->getQuadIndexBuffer());

Powered by Google App Engine
This is Rietveld 408576698