Hlavní navigace

SVGAlib: kopírování dat ze systémové paměti do video paměti

Jakub Matys

V dnešním dílu se podíváme na funkce pro kopírování dat ze systémové paměti do video paměti, na funkce nastavující uživatelskou paletu barev a začneme rozebírat používání myši.

Tyto funkce slouží ke kopírování dat ze systémové paměti do video paměti.

void vga_copytopla­nar256(unsigned char *virtual, int pitch, int voffset, int vpitch, int w, int h);

Kopíruje část obrazovky v systémové paměti na adrese *virtual do video paměti (Mode X). pitch je logická šířka virtuální obrazovky (v pixelech), voffset je adresový offset videopaměti,vpitch je šířka řádku obrazovky. h a w jsou šířka a výška pole, které se má kopírovat (v pixelech; w musí být násobkem čtyř).

void vga_copytopla­nar16(unsigned char *virtual, int pitch, int voffset, int vpitch, int w, int h);

Podobně jako vga_copytopla­nar256, ale pro módy s 16 barvami.

void vga_copytopla­ne(unsigned char *virtual, int pitch, int voffset, int vpitch, int w, int h, int plane);

Podobně jako předchozí dvě. Kopíruje však pouze podmnožinu čtyř úrovní 16barevných módů. plane by mělo být v rozsahu 0–15, bity v něm nastavené ukazují, která ze čtyř úrovní módu má být modifikována.

Následující funkce se používají k nastavení uživatelské palety barev.

void vga_setpalette(int index, int r, int g, int b);

Nastaví barvu s indexem index na RGB hodnotu proměnných r, g a b(všechny by měly být v rozsahu 0–63; nebo 0–255, pokud je nastavena volba VGA_CLUT8). Tato funkce má smysl pouze u módů s 16 nebo 256 barvami.

void vga_getpalette(int index, int *r, int *g, int *b);

Funkce získá hodnotu RGB z barvy s indexem index a uloží ji do proměnných *r, *g a *b(s rozsahem 0–63 nebo 0–255 – viz výše). Tato funkce je také použitelná jen v módech s 16 nebo 256 barvami.

int vga_getpalvec(int start, int num, int *pal);

Získá num barev, které začínají indexem start z tabulky barev a uloží jejich RGB hodnoty do pal. Velikost *pal musí být 3num integerů, protože ke každé barvě náleží tři položky z pole. Platí zde stejná omezení jako u dvou výše popsaných.

int vga_setpalvec(int start, int num, int *pal);

Nastaví num barev začínajících indexem start na RGB hodnoty v poli *pal. U této funkce platí stejná pravidla jako u její sestry.

Následující funkce slouží k práci s myší. První funkce používá hlavičkový soubor vga.h, další pak ještě vgamouse.h.

void vga_setmousesup­port(int stat);

Nastaví podporu myši – 0 zakazuje její použití (defaultně), 1 pak povoluje. Funkci musíte volat až po nastavení grafického módu, aby bylo nastaveno správné rozlišení kurzoru atd. Poté je možné použít další funkce pro práci s myší, a to s předponou mouse_. Je možné použít také funkci mouse_init, kde je možné nastavit další parametry myši. Tato funkce používá konfigurační soubor knihovny pro zjištění důležitých informací o zařízení.

int mouse_init(char *dev, int type, int samplerate);

int mouse_init_re­turn_fd(char *dev, int type, int samplerate);

Tyto funkce mohou být použity k explicitnímu „spuštění“ myši, ignorujícímu typ nebo zařízení myši, která jsou specifikována v konfiguračním souboru knihovny.

dev je jméno zařízení myši (defaultně je použito /dev_mouse).

samplerate může být MOUSE_DEFAULTSAM­PLERATE(150) nebo nějaká jiná hodnota v Hz specifikující obnovovací frekveni myši.

type je jeden z typů myší, které jsou předávany funkcí vga_getmousety­pe(3).

Pokud jsou tyto funkce použity, není nutné volat vga_setmousesup­port. Je však lepší používat funkci vga_setmousesup­port, protože nemůžete dopředu vědět, že „ten a ten“ počítač bude používat „ten a ten“ typ myši. Tyto informace jsou uloženy v konfiguračním souboru svgalib a je potom jen na uživateli, jak si knihovnu nakonfiguruje.

Verze funkce s return_fd vrací deskriptor souboru myši. Druhá verze vrací 0, pokud proběhla úspěšně, jinak –1.

void mouse_close(void);

Uzavírá zařízení myši. Funkce by měla být volána na konci programu (pokud myš používáte), protože se pokusí obnovit originální stav myši, jestliže byl změněn. Sekvence mouse_init(), mouse_close() a zase mouse_init() nebude korektně pracovat.

To by bylo pro dnešek vše. V příštím dílu si práci s myší doděláme.

Našli jste v článku chybu?
Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Lupa.cz: Brněnský radní chce zničit kartel operátorů. Uspěje?

Brněnský radní chce zničit kartel operátorů. Uspěje?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...