| Index: src/gpu/GrDistanceFieldTextContext.cpp
|
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp
|
| index d3b01703e484e686d8dfc28588f05cd635dabc0f..65e899960e16c3779ffd57ad4f3fc1ed10444a8e 100755
|
| --- a/src/gpu/GrDistanceFieldTextContext.cpp
|
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp
|
| @@ -374,8 +374,8 @@ static inline GrColor skcolor_to_grcolor_nopremultiply(SkColor c) {
|
| }
|
|
|
| static size_t get_vertex_stride(bool useColorVerts) {
|
| - return useColorVerts ? (2 * sizeof(SkPoint) + sizeof(GrColor)) :
|
| - (2 * sizeof(SkPoint));
|
| + return useColorVerts ? (sizeof(SkPoint) + sizeof(GrColor) + sizeof(SkIPoint16)) :
|
| + (sizeof(SkPoint) + sizeof(SkIPoint16));
|
| }
|
|
|
| static void* alloc_vertices(GrDrawTarget* drawTarget,
|
| @@ -443,12 +443,12 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo
|
| flags,
|
| opaque));
|
| #else
|
| - fCachedGeometryProcessor.reset(GrDistanceFieldNoGammaTextureEffect::Create(color,
|
| - fViewMatrix,
|
| - fCurrTexture,
|
| - params,
|
| - flags,
|
| - opaque));
|
| + fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create(color,
|
| + fViewMatrix,
|
| + fCurrTexture,
|
| + params,
|
| + flags,
|
| + opaque));
|
| #endif
|
| }
|
| fEffectTextureUniqueID = textureUniqueID;
|
| @@ -600,36 +600,59 @@ bool GrDistanceFieldTextContext::appendGlyph(GrGlyph::PackedID packed,
|
| useColorVerts);
|
| }
|
|
|
| - SkFixed tx = SkIntToFixed(glyph->fAtlasLocation.fX + SK_DistanceFieldInset);
|
| - SkFixed ty = SkIntToFixed(glyph->fAtlasLocation.fY + SK_DistanceFieldInset);
|
| - SkFixed tw = SkIntToFixed(glyph->fBounds.width() - 2*SK_DistanceFieldInset);
|
| - SkFixed th = SkIntToFixed(glyph->fBounds.height() - 2*SK_DistanceFieldInset);
|
| -
|
| fVertexBounds.joinNonEmptyArg(glyphRect);
|
|
|
| + int u0 = glyph->fAtlasLocation.fX + SK_DistanceFieldInset;
|
| + int v0 = glyph->fAtlasLocation.fY + SK_DistanceFieldInset;
|
| + int u1 = u0 + glyph->fBounds.width() - 2*SK_DistanceFieldInset;
|
| + int v1 = v0 + glyph->fBounds.height() - 2*SK_DistanceFieldInset;
|
| +
|
| size_t vertSize = get_vertex_stride(useColorVerts);
|
| + intptr_t vertex = reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex;
|
|
|
| - SkPoint* positions = reinterpret_cast<SkPoint*>(
|
| - reinterpret_cast<intptr_t>(fVertices) + vertSize * fCurrVertex);
|
| - positions->setRectFan(glyphRect.fLeft, glyphRect.fTop, glyphRect.fRight, glyphRect.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 + tw)),
|
| - SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + th)),
|
| - vertSize);
|
| + // V0
|
| + SkPoint* position = reinterpret_cast<SkPoint*>(vertex);
|
| + position->set(glyphRect.fLeft, glyphRect.fTop);
|
| if (useColorVerts) {
|
| - // 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(glyphRect.fLeft, glyphRect.fBottom);
|
| + if (useColorVerts) {
|
| + 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(glyphRect.fRight, glyphRect.fBottom);
|
| + if (useColorVerts) {
|
| + 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(glyphRect.fRight, glyphRect.fTop);
|
| + if (useColorVerts) {
|
| + 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;
|
|
|
|
|