int vga_getxdim(void);
int vga_getydim(void);
int vga_getcolors(void);
Tyto funkce nedělají nic jiného, než že uloží aktuální rozlišení obrazovky, resp. počet zobrazených barev.
int vga_white(void);
V high-color módech je vždy jasné, jakou má bílá hodnotu, v ostatních módech to však nemusí platit. Funkce vga_white tedy vrací hodnotu bílé, ta může být nastavena pomocí vga_setclolor nebo přímo zapsána na obrazovku. Funkce však pracuje pouze s defaultní paletou, pokud používáte nějakou „uživatelskou“ paletu, neporadí si s ní.
A nyní se už podíváme na funkce, které mají co dočinění s kreslením.
int vga_clear(void);
Čistí obrazovku a nastaví všechny viditelné pixely na 0. Pokud voláte funkci vga_setmode, je tato operace provedena automaticky. Funkce vždy vrací 0.
void vga_setcolor(int color);
Jak samotný název napovídá, tato funkce nastavuje aktuální barvu na color. Tuto funkci můžete použít pouze u módů s 256 a méně barvami. Pro jiné módy je lepší použít jednu z následujících dvou funkcí. Tato a obě následující funkce jsou používány funkcemi vga_drawpixel a vga_drawline.
void vga_setrgbcolor(int r, int g, int b);
Nastaví barvu v paletě RGB. Proměnné r, g, b musejí být v rozsahu 0–255. Funkce nebude fungovat v módech s 256 a méně barvami.
void vga_setegacolor(int color);
Tato funkce se snaží nastavit barvy, které se podobají barvám z EGA palety, a pracuje bez ohledu na hloubku daného módu. Platné hodnoty pro barvy:
- 0 – černá
- 1 – modrá
- 2 – zelená
- 3 – zelenomodrá(cyan)
- 4 – červená
- 5 – fialová
- 6 – hnědá
- 7 – šedá
- 8 – temně šedá (světle černá)
- 9 – světle modrá
- 10 – světle zelená
- 11 – světle modrozelená
- 12 – světle červená
- 13 – světle fialová
- 14 – žlutá (světle hnědá)
- 15 – bílá (světle šedivá)
int vga_drawpixel(int x, int y);
Funkce zobrazí na obrazovce barevný bod(pixel). Barvu musíte nastavit před voláním funkce jednou ze tří předchozích funkcí. Pro „rozlehlejší malování“ se tato funkce nehodí, použitelnější jsou následující tři.
int vga_drawscanline(int line, unsigned char *color);
Nakreslí horizontální přímku přes celou obrazovku na řádek, který se specifikuje parametrem line. Pokud například funkci předáte hodnotu 60, bude napočítán 60. pixel od vrchu obrazovky a na tomto řádku bude nakreslena přímka. Barvy použité při kreslení jsou brány z color[0] až color[length-1].
int vga_drawscansegment(unsigned char *colors, int x, int y, int length);
Tato funkce také nakreslí horizontální přímku, ta však není ohraničena okraji obrazovky. Levý okraj je udán souřadnicemi [x,y], pravý pak délkou přímky length od levého okraje. V high/true-color módech musí být length zadáno v bytech a ne v pixelech. Barvy jsou vybírány viz výše.
int vga_drawline(int x1, int y1, int x2, int y2);
Na rozdíl od výše popsaných funkcí tato nekreslí vodorovné přímky, ale přímky libovolně „posazené“ v rovině. Okraje přímky jsou udávány souřadnicemi [x1,y1] a [x2,y2]. Barva přímky se nastavuje pomocí funkcí vga_setcolor a vga_setrgbcolor. Tato funkce vždy vrací 0.
int vga_getpixel(int x, int y);
Přečte hodnotu jednoho pixelu z obrazovky. Tato funkce není příliš účinná, pokud chcete přečíst více pixelů ležících na řádku za sebou. Pro tyto účely je vhodnější funkce vga_getscansegment.
int vga_getscansegment(unsigned char *colors, int x, int y, int length);
Tato funkce pracuje opačně než vga_drawscansegment. Uloží hodnoty pixelů v řádku ohraničeném souřadnicemi [x,y] a [x, y + length] do pole o velikosti length – 1. A stejně jako u sesterské funkce musí být v high/true-color módech length udáno v bytech.
Tak už tedy umíte „něco“ nakreslit. To, co jsme doposud probrali, jsou jen základy, se kterými však lze vytvářet fungující programy. Příště se si povíme něco keyboard I/O a práci se stránkami.