diff --git a/src/modules/font/GlyphData.cpp b/src/modules/font/GlyphData.cpp index e2cdeade7..b93ffd8ab 100644 --- a/src/modules/font/GlyphData.cpp +++ b/src/modules/font/GlyphData.cpp @@ -43,8 +43,8 @@ GlyphData::GlyphData(uint32 glyph, GlyphMetrics glyphMetrics, GlyphData::Format { switch (f) { - case GlyphData::FORMAT_ALPHA: - data = new unsigned char[metrics.width * metrics.height]; + case GlyphData::FORMAT_LUMINANCE_ALPHA: + data = new unsigned char[metrics.width * metrics.height * 2]; break; case GlyphData::FORMAT_RGBA: default: @@ -68,8 +68,8 @@ int GlyphData::getSize() const { switch (format) { - case GlyphData::FORMAT_ALPHA: - return getWidth() * getHeight(); + case GlyphData::FORMAT_LUMINANCE_ALPHA: + return getWidth() * getHeight() * 2; break; case GlyphData::FORMAT_RGBA: default: @@ -168,7 +168,7 @@ bool GlyphData::getConstant(GlyphData::Format in, const char *&out) StringMap::Entry GlyphData::formatEntries[] = { - {"alpha", GlyphData::FORMAT_ALPHA}, + {"luminance alpha", GlyphData::FORMAT_LUMINANCE_ALPHA}, {"rgba", GlyphData::FORMAT_RGBA}, }; diff --git a/src/modules/font/GlyphData.h b/src/modules/font/GlyphData.h index 34306b67d..0bdb92c4e 100644 --- a/src/modules/font/GlyphData.h +++ b/src/modules/font/GlyphData.h @@ -58,7 +58,7 @@ public: enum Format { - FORMAT_ALPHA, + FORMAT_LUMINANCE_ALPHA, FORMAT_RGBA, FORMAT_MAX_ENUM }; diff --git a/src/modules/font/freetype/TrueTypeRasterizer.cpp b/src/modules/font/freetype/TrueTypeRasterizer.cpp index 1410f984a..f25809d60 100644 --- a/src/modules/font/freetype/TrueTypeRasterizer.cpp +++ b/src/modules/font/freetype/TrueTypeRasterizer.cpp @@ -86,7 +86,7 @@ GlyphData *TrueTypeRasterizer::getGlyphData(uint32 glyph) const glyphMetrics.width = bitmap.width; glyphMetrics.advance = face->glyph->metrics.horiAdvance >> 6; - GlyphData *glyphData = new GlyphData(glyph, glyphMetrics, GlyphData::FORMAT_ALPHA); + GlyphData *glyphData = new GlyphData(glyph, glyphMetrics, GlyphData::FORMAT_LUMINANCE_ALPHA); const uint8 *pixels = bitmap.buffer; uint8 *dest = (uint8 *) glyphData->getData(); @@ -100,7 +100,8 @@ GlyphData *TrueTypeRasterizer::getGlyphData(uint32 glyph) const { // Extract the 1-bit value and convert it to uint8. uint8 v = ((pixels[x / 8]) & (1 << (7 - (x % 8)))) ? 255 : 0; - dest[y * bitmap.width + x] = v; + dest[2 * (y * bitmap.width + x) + 0] = 255; + dest[2 * (y * bitmap.width + x) + 1] = v; } pixels += bitmap.pitch; @@ -111,7 +112,10 @@ GlyphData *TrueTypeRasterizer::getGlyphData(uint32 glyph) const for (int y = 0; y < bitmap.rows; y++) { for (int x = 0; x < bitmap.width; x++) - dest[y * bitmap.width + x] = pixels[x]; + { + dest[2 * (y * bitmap.width + x) + 0] = 255; + dest[2 * (y * bitmap.width + x) + 1] = pixels[x]; + } pixels += bitmap.pitch; } diff --git a/src/modules/graphics/opengl/Font.cpp b/src/modules/graphics/opengl/Font.cpp index 0e09227ed..eeb2b2c38 100644 --- a/src/modules/graphics/opengl/Font.cpp +++ b/src/modules/graphics/opengl/Font.cpp @@ -73,7 +73,7 @@ Font::Font(love::font::Rasterizer *r, const Image::Filter &filter) try { gd = r->getGlyphData(32); - type = (gd->getFormat() == love::font::GlyphData::FORMAT_ALPHA) ? FONT_TRUETYPE : FONT_IMAGE; + type = (gd->getFormat() == love::font::GlyphData::FORMAT_LUMINANCE_ALPHA) ? FONT_TRUETYPE : FONT_IMAGE; loadVolatile(); } @@ -96,7 +96,7 @@ Font::~Font() bool Font::initializeTexture(GLenum format) { - GLint internalformat = (format == GL_ALPHA) ? GL_ALPHA8 : GL_RGBA8; + GLint internalformat = (format == GL_LUMINANCE_ALPHA) ? GL_LUMINANCE8_ALPHA8 : GL_RGBA8; // clear errors before initializing while (glGetError() != GL_NO_ERROR); @@ -130,7 +130,7 @@ void Font::createTexture() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - GLenum format = (type == FONT_TRUETYPE ? GL_ALPHA : GL_RGBA); + GLenum format = (type == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA); // Initialize the texture, attempting smaller sizes if initialization fails. bool initialized = false; @@ -156,9 +156,9 @@ void Font::createTexture() throw love::Exception("Could not create font texture!"); } - + // Fill the texture with transparent black. - std::vector emptyData(textureWidth * textureHeight * (type == FONT_TRUETYPE ? 1 : 4), 0); + std::vector emptyData(textureWidth * textureHeight * (type == FONT_TRUETYPE ? 2 : 4), 0); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, @@ -208,7 +208,7 @@ Font::Glyph *Font::addGlyph(uint32 glyph) textureX, textureY, w, h, - (type == FONT_TRUETYPE ? GL_ALPHA : GL_RGBA), + (type == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA), GL_UNSIGNED_BYTE, gd->getData());