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

Unified Diff: src/gpu/GrBitmapTextContext.cpp

Issue 917373002: Use uint16s for texture coordinates when rendering text. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Use float uvs for distance field paths 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
« no previous file with comments | « include/gpu/GrTypesPriv.h ('k') | src/gpu/GrDistanceFieldTextContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrBitmapTextContext.cpp
diff --git a/src/gpu/GrBitmapTextContext.cpp b/src/gpu/GrBitmapTextContext.cpp
index 5e5aa6a3cd06ef54f9c41cfc7868d61463283701..21afc61d845e236097059ee1de7d0e342de0fccf 100755
--- a/src/gpu/GrBitmapTextContext.cpp
+++ b/src/gpu/GrBitmapTextContext.cpp
@@ -34,12 +34,12 @@ SK_CONF_DECLARE(bool, c_DumpFontCache, "gpu.dumpFontCache", false,
"Dump the contents of the font cache before every purge.");
namespace {
-static const size_t kLCDTextVASize = 2 * sizeof(SkPoint);
+static const size_t kLCDTextVASize = sizeof(SkPoint) + sizeof(SkIPoint16);
// position + local coord
-static const size_t kColorTextVASize = 2 * sizeof(SkPoint);
+static const size_t kColorTextVASize = sizeof(SkPoint) + sizeof(SkIPoint16);
-static const size_t kGrayTextVASize = 2 * sizeof(SkPoint) + sizeof(GrColor);
+static const size_t kGrayTextVASize = sizeof(SkPoint) + sizeof(GrColor) + sizeof(SkIPoint16);
static const int kVerticesPerGlyph = 4;
static const int kIndicesPerGlyph = 6;
@@ -421,8 +421,8 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
vy += SkIntToFixed(glyph->fBounds.fTop);
// keep them as ints until we've done the clip-test
- SkFixed width = glyph->fBounds.width();
- SkFixed height = glyph->fBounds.height();
+ int width = glyph->fBounds.width();
+ int height = glyph->fBounds.height();
// check if we clipped out
int x = vx >> 16;
@@ -463,10 +463,6 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
GrDrawTarget::DrawToken drawToken = fDrawTarget->getCurrentDrawToken();
glyph->fPlot->setDrawToken(drawToken);
- // now promote them to fixed (TODO: Rethink using fixed pt).
- width = SkIntToFixed(width);
- height = SkIntToFixed(height);
-
// the current texture/maskformat must match what the glyph needs
GrTexture* texture = glyph->fPlot->texture();
SkASSERT(texture);
@@ -484,39 +480,66 @@ void GrBitmapTextContext::appendGlyph(GrGlyph::PackedID packed,
fVertices = alloc_vertices(fDrawTarget, fAllocVertexCount, fCurrMaskFormat);
}
- SkFixed tx = SkIntToFixed(glyph->fAtlasLocation.fX);
- SkFixed ty = SkIntToFixed(glyph->fAtlasLocation.fY);
-
SkRect r;
r.fLeft = SkFixedToFloat(vx);
r.fTop = SkFixedToFloat(vy);
- r.fRight = SkFixedToFloat(vx + width);
- r.fBottom = SkFixedToFloat(vy + height);
+ r.fRight = r.fLeft + width;
+ r.fBottom = r.fTop + height;
fVertexBounds.joinNonEmptyArg(r);
+
+ int u0 = glyph->fAtlasLocation.fX;
+ int v0 = glyph->fAtlasLocation.fY;
+ int u1 = u0 + width;
+ int v1 = v0 + height;
size_t vertSize = get_vertex_stride(fCurrMaskFormat);
+ intptr_t vertex = reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex;
- SkPoint* positions = reinterpret_cast<SkPoint*>(
- reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex);
- positions->setRectFan(r.fLeft, r.fTop, r.fRight, r.fBottom, vertSize);
-
- // The texture coords are last in both the with and without color vertex layouts.
- SkPoint* textureCoords = reinterpret_cast<SkPoint*>(
- reinterpret_cast<intptr_t>(positions) + vertSize - sizeof(SkPoint));
- textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx + width)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + height)),
- vertSize);
+ // V0
+ SkPoint* position = reinterpret_cast<SkPoint*>(vertex);
+ position->set(r.fLeft, r.fTop);
if (kA8_GrMaskFormat == fCurrMaskFormat) {
- // color comes after position.
- GrColor* colors = reinterpret_cast<GrColor*>(positions + 1);
- for (int i = 0; i < 4; ++i) {
- *colors = fPaint.getColor();
- colors = reinterpret_cast<GrColor*>(reinterpret_cast<intptr_t>(colors) + vertSize);
- }
+ SkColor* color = reinterpret_cast<SkColor*>(vertex + sizeof(SkPoint));
+ *color = fPaint.getColor();
+ }
+ SkIPoint16* textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize -
+ sizeof(SkIPoint16));
+ textureCoords->set(u0, v0);
+ vertex += vertSize;
+
+ // V1
+ position = reinterpret_cast<SkPoint*>(vertex);
+ position->set(r.fLeft, r.fBottom);
+ if (kA8_GrMaskFormat == fCurrMaskFormat) {
+ SkColor* color = reinterpret_cast<SkColor*>(vertex + sizeof(SkPoint));
+ *color = fPaint.getColor();
}
+ textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize - sizeof(SkIPoint16));
+ textureCoords->set(u0, v1);
+ vertex += vertSize;
+
+ // V2
+ position = reinterpret_cast<SkPoint*>(vertex);
+ position->set(r.fRight, r.fBottom);
+ if (kA8_GrMaskFormat == fCurrMaskFormat) {
+ SkColor* color = reinterpret_cast<SkColor*>(vertex + sizeof(SkPoint));
+ *color = fPaint.getColor();
+ }
+ textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize - sizeof(SkIPoint16));
+ textureCoords->set(u1, v1);
+ vertex += vertSize;
+
+ // V3
+ position = reinterpret_cast<SkPoint*>(vertex);
+ position->set(r.fRight, r.fTop);
+ if (kA8_GrMaskFormat == fCurrMaskFormat) {
+ SkColor* color = reinterpret_cast<SkColor*>(vertex + sizeof(SkPoint));
+ *color = fPaint.getColor();
+ }
+ textureCoords = reinterpret_cast<SkIPoint16*>(vertex + vertSize - sizeof(SkIPoint16));
+ textureCoords->set(u1, v0);
+
fCurrVertex += 4;
}
« no previous file with comments | « include/gpu/GrTypesPriv.h ('k') | src/gpu/GrDistanceFieldTextContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698