My solution to the problem I had a few weeks ago about bitmap fonts being too slow and texture fonts being too ugly is to display the bitmapped font at startup in an evenly-spaced, ASCII-order grid, then read the frame buffer back as LUMINENCE data, and then create a texture font from this as LUMINENCE_ALPHA data (setting alpha to FF for non-zero pixels and 00 for zero ones), and finally create a set of display lists (one per char).
Defining the texture with GL_NEAREST gives bad results (the lines of each character are not the same width) even though since I’m trying to recreate the font in the exact same size it seems this should be OK. I use GL_LINEAR and it’s fuzzier than I would like but the characters have a regular width.
The problem now is color. In order to get the correct color I use glGetFloatv (GL_CURRENT_COLOR) and then call glColorMask with the RGB components on or off per the read values (on or off is OK because the text will be either a primary (RGB) or secondary (CYM) color, no other shade). The use of glColorMask when not all 3 colors are on adds almost 40 ms to my frame time (22 vs. 61). That is, forcing all on for white text is fast, forcing all off for black text is fast, but getting colored text by mixing on and off is slow. Is there a better (quicker) way to set the color, or is this a limitation of using texture mapped fonts?