První funkcí, kterou si dnes ukážeme, je gl_setfont. Její funkční prototyp je void gl_setfont(int fw, int fh, void *fp). Funkce použije font uložený na adrese, kam ukazuje fp, jako základní. Tento font musí být uložen jako bitmapová data se znaky o velikosti fw x fh. Pokud není nastaven bit FONT_COMPRESSED (viz níže), musíte font nejdříve dekomprimovat (protože fonty jsou ukládány s „kompresí“ bit-per-pixel).
Když už máme nastavený font, musíme mu také přiřadit barvu. To se provádí funkcí gl_setfontcolors. Jejími parametry jsou dvě celočíselné hodnoty, které udávají barvu pozadí a popředí komprimovaného fontu. Funkce vrací typ void.
Funkce void gl_expandfont(int fw, int fh, int c, void *sfp, void *dfp) konvertuje znaky uložené „bit-per-pixel“ na nekomprimovaný font. Data pro konverzi jsou brána z adresy sfp, přičemž musí obsahovat 256 znaků o velikosti fw x fh. Dekomprimovaný font je poté uložen na adresu dfp (jeho velikost je 256 * fw * fw * BYTEPERPIXEL). Všechny nenulové pixely jsou navíc nastaveny na barvuc.
Pro nastavení barvy textu nekomprimovaných fontů použijeme funkci void gl_colorfont(int fw, int fh, c, void fp). Ta nastaví všechny nenulové pixely na adrese fb na barvu c. fb obsahuje data s 256 znaky o velikosti fw x fh.
void gl_setwritemode(int m) slouží k nastavení konfiguračních příznaků písem. Parametrem je součet bitů z následujících dvou skupin:
WRITEMODE_MASKED
WRITEMODE_OVERWRITE (default)
- Pokud je nastaven bit WRITEMODE_MASKED, jsou pro zapisovací operace použity pouze pixely v popředí – původní pozadí obrazovky není vymazáno.
FONT_COMPRESSED
FONT_EXPANDED (default)
- Pokud je nastaven bit FONT_COMPRESSED, text zapsaný na obrazovku bude používat komprimovaný „bit-per-pixel“ font, přičemž nekomprimovaný font může být rychlejší.
Funkce pro nastavení fontů by nám však nebyly k ničemu, kdybychom neměli k dispozici funkce pro zápis na obrazovku…
void gl_write(int x, int y, char *s);
void gl_writen(int x, int y, int n, char *s);
gl_write zapisuje řetězec s ukončený nulovým znakem na pozici x, y, přičemž používá aktuálně nastavený font.
gl_writen pracuje obdobně, ale vypíše maximálně n znaků, pokud nenarazí na ‚\n‘.
Způsob zapisování dat na obrazovku je nastaven funkcí gl_setwritemode. Před použitím funkcí musíte nastavit font, který hodláte používat. Např.:
gl_setfont(8, 8, font8x8); gl_setwritemode(FONT_COMPRESSED + WRITEMODE_OVERWRITE); gl_setfontcolors(0, vga_white());
Funkce int gl_printf(int x, int y, const char *fmt, …); pracuje obdobně jako printf(3), zapisuje fomátovaný řetězec na pozici x, y, přičemž používá aktuální font. Pokud je x nebo y (nebo oba údaje) negativní, je text tisknut na poslední pozici. Speciální znaky \b, \r, \n, \a, \t a \v mají běžný efekt. Pro používání funkce platí stejná pravidla jako výše.
extern unsigned char *gl_font8×8;: gl_font8×8 obsahuje zapakovaný font s 8×8 pixely na znak, který můžete použít pro vaše vgagl programy. Před použitím by se měl dekomprimovat funkcí gl_expandfont.
To by bylo pro dnešek vše, příště se naučíme pracovat s pix- a bitmapami.