Hlavní navigace

SVGAlib (12)

Jakub Matys

V dnešním dílu se podíváme na funkci ACCEL_POLYHLINE, která kombinuje vlastnosti funkcí ACCEL_POLYNE a ACCEL_DRAWHLINELIST, a na funkci ACCEL_POLYFILLMODE, která mám zase umožňuje hardwarové vykreslování obrazců.

vga_accel(ACCEL_POLYHLINE, int flag, int y, int n, unsigned short *xcoords) 

Tato funkce je kombinací funkcí ACCEL_POLYNE a ACCEL_DRAWHLI­NELIST. Kreslení začíná na řádce y a jednotlivé řádky (přímky) jsou kresleny shora dolů. Pole *xcoordsbude pro každou řádku obsahovat dvě souřadnice s osou x (uspořádání je zleva doprava). Pokud při kreslení vyčerpáte všechny hodnoty pole *xcoords, operace pokračuje dál, přičemž souřadnice jsou brány opět z tohoto pole (indexy 0,1,2…).

Procedura se ukončí po n řádcích.

Parametr flag pracuje podobně jako u ACCEL_POLYNE. Vaše první volání musí obsahovat bit ACCEL_START. Parametr y je ignorován, pokud není předán ACCEL_START.

Je však důsledně požadováno nastavení bitu ACCEL_END při posledním volání.

Funkce je navržena pro kreslení zcela vyplněných mnohoúhelníků používajících horizontální řádky. Pomocí malých a rychlých volání funkce pouze pro několik řádek je možné kombinovat kreslení a výpočty.

Operace ACCEL_POLYHLINE je nefunkční, pokud xové souřadnice nejsou seřazeny zleva doprava nebo jsou použity nulové vzdálenosti jednotlivých řádek anebo pokud je n nebo jedno z m nulové.

vga_accel(ACCEL_POLYFILLMODE, onoff)

Přepíná mód naplnění polygonu na ON (onoff nenulový) nebo OFF.

Pokud budete mít zapnutý „naplněný“ mód a pomocí ACCEL_DRAWLINEnebo ACCEL_POLYLINE budete kreslit pouze krajní body mnohoúhelníků, bude ACCEL_SCREENCO­PYMONO horizontálně načítat zdrojovou plochu a začne kreslení v barvě popředí, jestliže nalezne nastavený pixel. Pokud bude druhý pixel nastaven na 0, bude v kreslení této barvy pokračovat, dokud nenarazí na druhý okraj obrazce.

Díky tomuto mechanismu můžete vyplňovat polygony s hardwarovou podporou:

  1. Povolte mód vyplňování mnohoúhelníků.
  2. Naplňte pravoúhlou oblast mimo viditelnou obrazovku barvou se všemi bity nastavenými na 0 (obvykle černá).
  3. Nakreslete obrys mnohoúhelníku (většinou uzavřený) v „neviditelné“ černé oblasti v barvě se všemi bity nastavenými na 1 (bílá). Pro získání vhodně nastavených bitů je doporučeno použít ROP_XOR (u ACCEL_POLYNE). Jestliže pracujete v tomto módu, musíte mít nastaveny startovací i ukončovací souřadnice, aby byly správně propojeny rohy obrazce. V tomto případě je však lepší použít ACCEL_DRAWWINE místo ACCEL_POLYNE. Je možné, že by zbytečné horizontální přímky mohly zmást ACCEL_SCREENCO­PYMONO, proto je radši přeskočte.
  4. Nastavte barvu popředí a pozadí, operace rastru a bitmapovou průhlednost, kterou chcete pro svůj obrazec použít.
  5. Použijte ACCEL_SCREENCO­PYMONO pro kopírování obrazce z „neviditelné“ do „viditelné“ obrazovky.

Jelikož kreslení mnohoúhelníků tímto způsobem používá více operací pro čtení/zápis, je s největší pravděpodobností pomalejší než použití ACCEL_DRAWHLINELIST nebo ACCEL_POLYNE. Avšak je jednoduší na použití a bude zpravidla pracovat bez zásahu CPU, která může provádět jiné operace.

vga_accel(ACCEL_SETMODE, mode)

Nastavuje, jestli se bude čekat na operace akcelerátoru. Můžete si vybrat ze dvou voleb; BLITS_SYNC, neboBLITS_IN_BAC­KGROUND. Při první volbě se vga_accel vrací pouze v případě, že akcelerátor ukončil svoji činnost. Druhá umožňuje okamžité vrácení z funkce, tj. CPU a akcelerátor pracují paralelně. Následné operace akcelerátoru budou čekat na každou další (a blokovat, pokud je to nutné).

vga_accel(ACCEL_SYNC)

Čeká na ukončení práce akcelerátoru (pokud je nastaven mód BLITS_IN_BACKGRO­UND).

vga_accel(ACCEL_SETOFFSET, int address)

Nastaví offset obrazovky jako funkce vga_setdispla­ystart(3). Pro funkci platí omezení, která jsou zapsána ve struktuře vrácené vga_getmodeinfo(3).

Offset akcelerátoru se bude řídit offsetem obrazovky, kdykoliv ten bude modifikován. Můžete však pomocí vga_accel(ACCEL_SE­TOFFSET) offset nastavit kdykoliv později.

To by bylo pro dnešek vše, příště budeme pokračovat v používání akcelerátoru.

Našli jste v článku chybu?

22. 11. 2004 15:38

fikus (neregistrovaný)

Sice tento seriál nesleduji, přece jen položím
autorovi či komukoliv následující otázku:
SVGAlib má vlastní ovladač grafiky? Proč se
nevyužije framebuffer, který je v jádru a mohl
by sloužit k témuž úkolu, grafika v konzoli?





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

DigiZone.cz: SES zajistí HD pro M7 Group

SES zajistí HD pro M7 Group

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: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

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

R2B2 a Hybrid uzavřely partnerství

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

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

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

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

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

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: Ohrozí Freedom TV přechodové sítě?

Ohrozí Freedom TV přechodové sítě?

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

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

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

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

Jak vymáhat výživné zadarmo?

Měšec.cz: Exekuční poradna: ptejte se online

Exekuční poradna: ptejte se online

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

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

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