diff options
author | jvanverth <jvanverth@google.com> | 2015-01-07 10:12:16 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-07 10:12:16 -0800 |
commit | a27b82ddf0fad959371a4ab1fba931826edb2f54 (patch) | |
tree | 126562d38bd42ba438aa9c6f835d8c77ff5e2a1f /src/gpu | |
parent | 690fc594f11a987ba0e885a7eb01aff363395f12 (diff) |
Remove distance field generation and storage from SkGlyphCache.
BUG=skia:3103
Review URL: https://codereview.chromium.org/834103004
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrFontScaler.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/gpu/GrFontScaler.cpp b/src/gpu/GrFontScaler.cpp index 0f85b83e16..ed1970e262 100644 --- a/src/gpu/GrFontScaler.cpp +++ b/src/gpu/GrFontScaler.cpp @@ -196,19 +196,35 @@ bool GrFontScaler::getPackedGlyphImage(GrGlyph::PackedID packed, } bool GrFontScaler::getPackedGlyphDFImage(GrGlyph::PackedID packed, - int width, int height, - void* dst) { + int width, int height, + void* dst) { const SkGlyph& glyph = fStrike->getGlyphIDMetrics(GrGlyph::UnpackID(packed), GrGlyph::UnpackFixedX(packed), GrGlyph::UnpackFixedY(packed)); SkASSERT(glyph.fWidth + 2*SK_DistanceFieldPad == width); SkASSERT(glyph.fHeight + 2*SK_DistanceFieldPad == height); - const void* src = fStrike->findDistanceField(glyph); - if (NULL == src) { + const void* image = fStrike->findImage(glyph); + if (NULL == image) { + return false; + } + // now generate the distance field + SkASSERT(dst); + SkMask::Format maskFormat = static_cast<SkMask::Format>(glyph.fMaskFormat); + if (SkMask::kA8_Format == maskFormat) { + // make the distance field from the image + SkGenerateDistanceFieldFromA8Image((unsigned char*)dst, + (unsigned char*)image, + glyph.fWidth, glyph.fHeight, + glyph.rowBytes()); + } else if (SkMask::kBW_Format == maskFormat) { + // make the distance field from the image + SkGenerateDistanceFieldFromBWImage((unsigned char*)dst, + (unsigned char*)image, + glyph.fWidth, glyph.fHeight, + glyph.rowBytes()); + } else { return false; } - - memcpy(dst, src, width * height); return true; } |