Hlavní navigace

SVGAlib (11)

Jakub Matys

V minulém dílu jsme začali celkem zajímavé téma, jedná se o obsluhu akcelerátorů. V dnešním a několika dalších dílech se budeme této problematice dále věnovat. Zatímco v minulém dílu jsme se naučili kreslit čtverce a přímky, dnes se naučíme kreslit mnohoúhelníky.

vga_accel(ACCEL_PUTBITMAP, int x, int y, int w, int h, void *p) 

Pracuje podobně jako ACCEL_PUTIMAGE, ale bitmapa *p je jednobitová. Každý pixel v *p, který má nastavený bit, je nakreslen v barvě popředí, ostatní pixely jsou nakresleny v barvě pozadí.

Každý byte v *p obsahuje osm pixelů. Nejnižší bit každého bytu je na obrazovce umístěn nejvíce vlevo (což je opačné od tradičního VGA) a nerespektuje se příznakový bit. Data jsou uložena v segmentech po 32 bitech.

vga_accel(ACCEL_SCREENCOPYBITMAP, int x1, int y1, int x2, int y2, w, h) 

Pracuje podobně jako ACCEL_PUTBITMAP, ale bitmapa leží na pozici x1, y1 a cíl na x2, y2.

Velikosti pixelů v obou bitmapách se však mohou odlišovat. Bitmapa *p musí mít formát shodující se s ACCEL_PUTBITMAP, ale v paměti musí začínat tam, kde by měl být pixel x1, y1.

V módech, kde pixel nebude začínat na okraji bytu (typicky módy s méně než 256 barvami), musí pixel x1, y1 začínat na počátku bytu.

vga_accel(ACCEL_DRAWHLINELIST, int y, int n, int *x1, int *x2) 

Tato funkce umožňuje nakreslit v podstatě libovolné 2D těleso pomocí horizontálních přímek. Pole *x1 a *x2 obsahují n uspořádaných dvojic. Tyto dvojice představují x-ové souřadnice kreslených přímek. Přímka začíná na pozici *x1, y a končí na*x2, y. Hodnota y se neustále zvyšuje až do y + n. Tato operace je obvykle velmi rychlá a je užitečná pro kreslení libovolných mnohoúhelníků.

vga_accel(ACCEL_POLYNE, int flag, int n unsigned short *coords) 

Kreslí nepřetržitou přímku přes n bodů uvedených v*coords. *coords obsahuje n párů „krátkých integerů“. První z páru je orientovaný na osu x, druhý pak na y.

Normálně by měl flag nabývat hodnoty ACEEL_START | ACCEL_END. Pokud je např. vyhodnocení bodů výpočetně náročné, můžete střídat výpočty a kreslení. První volání funkce vga_accel(ACCEL_PO­LYNE, …) musí mít nastaveno ACCEL_START. Tento příkaz zinicializuje akcelerátor. Pokud nenastavíte příznak ACCEL_END, můžete (resp. musíte) volat funkci dále a předávat jí další body pro spojení. Je důležité, aby žádné operace (ani pro nastavení barev) nepracovaly s grafikou mezi volánímiACCEL_START a jedním z odpovídajících ACCEL_END. Ze zmíněného důvodu je také důležité zamykat konzoli pomocí vga_lockvc(3) a vga_unlockvc(3), protože operace nemůže být přerušena přepnutím konzole.

Jestliže voláte vga_accel(ACCLE_PO­LYNE, …) jako poslední funkci (pro nynější kreslený objekt), nemusíte uvádětACCEL_END. Akcelerátor bude automaticky deinicializován, až zavoláte jinou kreslící funkci.

Není známo, co se stane, pokud nastavíte jiné hodnoty proměnné flag nebo pokud váš polynom bude obsahovat jenom jeden bod. Jednotlivé „řádkové segmenty“ musí mít větší velikost než nula.

To by bylo pro dnešek vše. Jak jsem slíbil, v příštím dílu se budeme nadále věnovat akcelerátorům.

Našli jste v článku chybu?
Vitalia.cz: 7 originálních adventních kalendářů pro mlsné

7 originálních adventních kalendářů pro mlsné

Root.cz: Nová třída SD karet A1 s vysokým výkonem

Nová třída SD karet A1 s vysokým výkonem

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

Vitalia.cz: To nejhorší při horečce u dětí: Febrilní křeče

To nejhorší při horečce u dětí: Febrilní křeče

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

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

Vitalia.cz: Test na HIV je zdarma i za pět set

Test na HIV je zdarma i za pět set

Lupa.cz: Obchod budoucnosti je bez front, košíků i pokladen

Obchod budoucnosti je bez front, košíků i pokladen

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

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

Co všechno ovlivňuje ženskou plodnost?

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

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

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Vitalia.cz: Nejlepší obranou při nachlazení je útok

Nejlepší obranou při nachlazení je útok