int num_glyphs;
int baseline;
unsigned char *glyphmap;
+float fgcolor[] = {1, 1, 1, 1}, bgcolor[] = {0, 0, 0, 0};
static const char *usage_fmt = "Usage %s [options]\n"
" -sans: sans-serif font\n"
" -serif: serif font\n"
" -size <n>: font size\n"
+ " -bg/-fg <hexcolor>: backdrop/font color\n"
" -help: print usage and exit\n\n";
int main(int argc, char **argv)
fprintf(stderr, "-size must be followed by the font size\n");
return 1;
}
+ } else if(strcmp(argv[i], "-fg") == 0 || strcmp(argv[i], "-bg") == 0) {
+ unsigned int packed;
+ char *endp;
+ float *col;
+ if(!argv[++i] || ((packed = strtol(argv[i], &endp, 16)), endp == argv[i])) {
+ fprintf(stderr, "%s must be followed by a hex/html packed color\n", argv[i - 1]);
+ return 1;
+ }
+ col = (argv[i - 1][1] == 'f') ? fgcolor : bgcolor;
+ col[0] = ((packed >> 16) & 0xff) / 255.0f;
+ col[1] = ((packed >> 8) & 0xff) / 255.0f;
+ col[2] = (packed & 0xff) / 255.0f;
+
} else if(strcmp(argv[i], "-help") == 0 || strcmp(argv[i], "-h") == 0) {
printf(usage_fmt, argv[0]);
return 0;
{
int i, x, y;
struct glyph *g;
+ unsigned char *pixptr;
+ glClearColor(bgcolor[0], bgcolor[1], bgcolor[2], bgcolor[3]);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
num_glyphs = 0;
+ glColor4f(fgcolor[0], fgcolor[1], fgcolor[2], fgcolor[3]);
glRasterPos2i(x, y);
for(i=32; i<128; i++) {
int width = glutBitmapWidth(font, i);
glutReshapeWindow(win_width, win_height / 2);
}
- glReadPixels(0, 0, win_width, win_height, GL_LUMINANCE, GL_UNSIGNED_BYTE, glyphmap);
+ pixptr = glyphmap;
+ for(i=0; i<win_height; i++) {
+ glReadPixels(0, win_height - i - 1, win_width, 1, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixptr);
+ pixptr += win_width;
+ }
glutSwapBuffers();
}