support lcd16 in text atlas (sans shader support)
git-svn-id: http://skia.googlecode.com/svn/trunk@939 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/SkGrFontScaler.cpp b/src/gpu/SkGrFontScaler.cpp
index 3d57aa8..16e44b9 100644
--- a/src/gpu/SkGrFontScaler.cpp
+++ b/src/gpu/SkGrFontScaler.cpp
@@ -83,6 +83,19 @@
GrSafeUnref(fKey);
}
+GrMaskFormat SkGrFontScaler::getMaskFormat() {
+ SkMask::Format format = fStrike->getMaskFormat();
+ switch (format) {
+ case SkMask::kA8_Format:
+ return kA8_GrMaskFormat;
+ case SkMask::kLCD16_Format:
+ return kA565_GrMaskFormat;
+ default:
+ GrAssert(!"unsupported SkMask::Format");
+ return kA8_GrMaskFormat;
+ }
+}
+
const GrKey* SkGrFontScaler::getKey() {
if (NULL == fKey) {
fKey = new SkGrDescKey(fStrike->getDescriptor());
@@ -117,8 +130,9 @@
if (srcRB == dstRB) {
memcpy(dst, src, dstRB * height);
} else {
+ const int bbp = GrMaskFormatBytesPerPixel(this->getMaskFormat());
for (int y = 0; y < height; y++) {
- memcpy(dst, src, width);
+ memcpy(dst, src, width * bbp);
src = (const char*)src + srcRB;
dst = (char*)dst + dstRB;
}