diff -u -r -w ftgl-2.1.2.orig/src/FTTextureGlyph.cpp ftgl-2.1.2/src/FTTextureGlyph.cpp
--- ftgl-2.1.2.orig/src/FTTextureGlyph.cpp	2004-10-17 02:40:19.000000000 +0200
+++ ftgl-2.1.2/src/FTTextureGlyph.cpp	2009-06-01 04:41:31.000000000 +0200
@@ -26,8 +26,33 @@
         glPixelStorei( GL_UNPACK_ROW_LENGTH, 0);
         glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
 
+        unsigned char *data = bitmap.buffer;
+        if( bitmap.num_grays == 1)
+        {
+            bBox = FTBBox(0, 0, 0, destWidth, destHeight, 0);
+            data = new unsigned char[destWidth * destHeight];
+            memset(data, 0, destWidth * destHeight);
+            unsigned char* dest = data;
+            for( int y = 0; y < destHeight; ++y)
+            {
+                unsigned char* src = bitmap.pitch < 0
+                  ? bitmap.buffer + (y - destHeight + 1) * bitmap.pitch
+                  : bitmap.buffer + y * bitmap.pitch;
+                unsigned char c;
+                for( int x = 0; x < destWidth; ++x)
+                {
+                    if (x % 8 == 0)
+                      c = *src++;
+                    *dest++ = ((c >> (7 - (x % 8))) & 1) * 255;
+                }
+            }
+        }
+
         glBindTexture( GL_TEXTURE_2D, glTextureID);
-        glTexSubImage2D( GL_TEXTURE_2D, 0, xOffset, yOffset, destWidth, destHeight, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer);
+        glTexSubImage2D( GL_TEXTURE_2D, 0, xOffset, yOffset, destWidth, destHeight, GL_ALPHA, GL_UNSIGNED_BYTE, data);
+
+        if (data != bitmap.buffer)
+          delete [] data;
 
         glPopClientAttrib();
     }

diff -u -r -w ftgl-2.1.2.orig/include/FTPixmapGlyph.h ftgl-2.1.2/include/FTPixmapGlyph.h
--- ftgl-2.1.2.orig/include/FTPixmapGlyph.h	2004-10-17 02:40:13.000000000 +0200
+++ ftgl-2.1.2/include/FTPixmapGlyph.h	2009-06-01 04:25:09.000000000 +0200
@@ -39,6 +39,8 @@
          */
         virtual const FTPoint& Render( const FTPoint& pen);
         
+        bool Valid( void) { return destWidth && destHeight; }
+
         // attributes
 
     private:
diff -u -r -w ftgl-2.1.2.orig/src/FTPixmapGlyph.cpp ftgl-2.1.2/src/FTPixmapGlyph.cpp
--- ftgl-2.1.2.orig/src/FTPixmapGlyph.cpp	2004-12-06 11:34:50.000000000 +0100
+++ ftgl-2.1.2/src/FTPixmapGlyph.cpp	2009-06-01 04:23:41.000000000 +0200
@@ -7,7 +7,7 @@
     data(0)
 {
     err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL);
-    if( err || ft_glyph_format_bitmap != glyph->format)
+    if( err || ft_glyph_format_bitmap != glyph->format || glyph->bitmap.num_grays == 1)
     {
         return;
     }
diff -u -r -w ftgl-2.1.2.orig/src/FTGLPixmapFont.cpp ftgl-2.1.2/src/FTGLPixmapFont.cpp
--- ftgl-2.1.2.orig/src/FTGLPixmapFont.cpp	2004-12-06 11:34:50.000000000 +0100
+++ ftgl-2.1.2/src/FTGLPixmapFont.cpp	2009-06-01 04:34:38.000000000 +0200
@@ -1,4 +1,5 @@
 #include    "FTGLPixmapFont.h"
+#include    "FTBitmapGlyph.h"
 #include    "FTPixmapGlyph.h"
 
 
@@ -23,7 +24,10 @@
     if( ftGlyph)
     {
         FTPixmapGlyph* tempGlyph = new FTPixmapGlyph( ftGlyph);
+        if (tempGlyph->Valid())
         return tempGlyph;
+        delete tempGlyph;
+        return new FTBitmapGlyph( ftGlyph);
     }
 
     err = face.Error();
diff -u -r -w ftgl-2.1.2.orig/src/FTGLBitmapFont.cpp ftgl-2.1.2/src/FTGLBitmapFont.cpp
--- ftgl-2.1.2.orig/src/FTGLBitmapFont.cpp	2004-10-08 13:37:24.000000000 +0200
+++ ftgl-2.1.2/src/FTGLBitmapFont.cpp	2009-06-01 01:33:09.000000000 +0200
@@ -39,7 +39,7 @@
     glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE);
     glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
 
-    glDisable( GL_BLEND);
+    // glDisable( GL_BLEND);
 
     FTFont::Render( string);
 
@@ -56,7 +56,7 @@
     glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE);
     glPixelStorei( GL_UNPACK_ALIGNMENT, 1);

-    glDisable( GL_BLEND);
+    // glDisable( GL_BLEND);
 
     FTFont::Render( string);
 