| Index: src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
|
| diff --git a/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp b/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
|
| index 00a73641aa7ab8902a85e6572824434709afa971..c2f3f22d7ea85efde35c473e6aae2b0fd30b7f78 100644
|
| --- a/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
|
| +++ b/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
|
| @@ -21,6 +21,7 @@
|
| template <bool regenPos, bool regenCol, bool regenTexCoords>
|
| inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexStride,
|
| bool useDistanceFields, SkScalar transX, SkScalar transY,
|
| + int32_t log2Width, int32_t log2Height,
|
| GrColor color) {
|
| int u0, v0, u1, v1;
|
| if (regenTexCoords) {
|
| @@ -39,6 +40,20 @@ inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexS
|
| u1 = u0 + width;
|
| v1 = v0 + height;
|
| }
|
| +
|
| + // normalize
|
| + u0 *= 65535;
|
| + u0 >>= log2Width;
|
| + u1 *= 65535;
|
| + u1 >>= log2Width;
|
| + v0 *= 65535;
|
| + v0 >>= log2Height;
|
| + v1 *= 65535;
|
| + v1 >>= log2Height;
|
| + SkASSERT(u0 >= 0 && u0 <= 65535);
|
| + SkASSERT(u1 >= 0 && u1 <= 65535);
|
| + SkASSERT(v0 >= 0 && v0 <= 65535);
|
| + SkASSERT(v1 >= 0 && v1 <= 65535);
|
| }
|
|
|
| // This is a bit wonky, but sometimes we have LCD text, in which case we won't have color
|
| @@ -59,8 +74,9 @@ inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexS
|
| }
|
|
|
| if (regenTexCoords) {
|
| - SkIPoint16* textureCoords = reinterpret_cast<SkIPoint16*>(vertex + texCoordOffset);
|
| - textureCoords->set(u0, v0);
|
| + uint16_t* textureCoords = reinterpret_cast<uint16_t*>(vertex + texCoordOffset);
|
| + textureCoords[0] = (uint16_t) u0;
|
| + textureCoords[1] = (uint16_t) v0;
|
| }
|
| vertex += vertexStride;
|
|
|
| @@ -77,8 +93,9 @@ inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexS
|
| }
|
|
|
| if (regenTexCoords) {
|
| - SkIPoint16* textureCoords = reinterpret_cast<SkIPoint16*>(vertex + texCoordOffset);
|
| - textureCoords->set(u0, v1);
|
| + uint16_t* textureCoords = reinterpret_cast<uint16_t*>(vertex + texCoordOffset);
|
| + textureCoords[0] = (uint16_t)u0;
|
| + textureCoords[1] = (uint16_t)v1;
|
| }
|
| vertex += vertexStride;
|
|
|
| @@ -95,8 +112,9 @@ inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexS
|
| }
|
|
|
| if (regenTexCoords) {
|
| - SkIPoint16* textureCoords = reinterpret_cast<SkIPoint16*>(vertex + texCoordOffset);
|
| - textureCoords->set(u1, v1);
|
| + uint16_t* textureCoords = reinterpret_cast<uint16_t*>(vertex + texCoordOffset);
|
| + textureCoords[0] = (uint16_t)u1;
|
| + textureCoords[1] = (uint16_t)v1;
|
| }
|
| vertex += vertexStride;
|
|
|
| @@ -113,8 +131,9 @@ inline void regen_vertices(intptr_t vertex, const GrGlyph* glyph, size_t vertexS
|
| }
|
|
|
| if (regenTexCoords) {
|
| - SkIPoint16* textureCoords = reinterpret_cast<SkIPoint16*>(vertex + texCoordOffset);
|
| - textureCoords->set(u1, v0);
|
| + uint16_t* textureCoords = reinterpret_cast<uint16_t*>(vertex + texCoordOffset);
|
| + textureCoords[0] = (uint16_t)u1;
|
| + textureCoords[1] = (uint16_t)v0;
|
| }
|
| }
|
|
|
| @@ -161,6 +180,7 @@ void GrAtlasTextBlob::regenInBatch(GrDrawBatch::Target* target,
|
| bool brokenRun = false;
|
| for (int glyphIdx = 0; glyphIdx < glyphCount; glyphIdx++) {
|
| GrGlyph* glyph = nullptr;
|
| + int log2Width = 0, log2Height = 0;
|
| if (regenTexCoords) {
|
| size_t glyphOffset = glyphIdx + info->glyphStartIndex();
|
|
|
| @@ -187,6 +207,8 @@ void GrAtlasTextBlob::regenInBatch(GrDrawBatch::Target* target,
|
| }
|
| fontCache->addGlyphToBulkAndSetUseToken(info->bulkUseToken(), glyph,
|
| target->currentToken());
|
| + log2Width = fontCache->log2Width(info->maskFormat());
|
| + log2Height = fontCache->log2Height(info->maskFormat());
|
| }
|
|
|
| intptr_t vertex = reinterpret_cast<intptr_t>(fVertices);
|
| @@ -194,7 +216,7 @@ void GrAtlasTextBlob::regenInBatch(GrDrawBatch::Target* target,
|
| vertex += vertexStride * glyphIdx * GrAtlasTextBatch::kVerticesPerGlyph;
|
| regen_vertices<regenPos, regenCol, regenTexCoords>(vertex, glyph, vertexStride,
|
| info->drawAsDistanceFields(), transX,
|
| - transY, color);
|
| + transY, log2Width, log2Height, color);
|
| helper->incGlyphCount();
|
| }
|
|
|
|
|