It's a great tutorial, and I managed to get freetype fonts in my opengl game in no time at all

There's a small, but significant problem with the code though! The textures are created as luminance-alpha textures, which is good, but the mistake is that both the luminance _and_ the alpha are set to the value from the glyph bitmap.
This basically produces an image with premultiplied alpha, yet the alpha gets applied once more during rendering -- causing the edges of glyphs to become much more jaggy.
Simply changing the bitmap creation code from:
for(int j = 0; j <height ; j++) {
for(int i = 0; i < width; i++) {
expanded_data[2 * (i + j * width)] = expanded_data[2 * (i + j * width) + 1] =
(i >= bitmap.width || j >= bitmap.rows) ? 0 : bitmap.buffer[i + bitmap.width * j];
}
}
to:
for(int j = 0; j <height ; j++) {
for(int i = 0; i < width; i++) {
expanded_data[2 * (i + j * width)] = 255;
expanded_data[2 * (i + j * width) + 1] =
(i >= bitmap.width || j >= bitmap.rows) ? 0 : bitmap.buffer[i + bitmap.width * j];
}
}
produces a softer, less jaggy image.