vga_accel(ACCEL_POLYHLINE, int flag, int y, int n, unsigned short *xcoords)
Tato funkce je kombinací funkcí ACCEL_POLYNE a ACCEL_DRAWHLINELIST. 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_SCREENCOPYMONO 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:
- Povolte mód vyplňování mnohoúhelníků.
- Naplňte pravoúhlou oblast mimo viditelnou obrazovku barvou se všemi bity nastavenými na 0 (obvykle černá).
- 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_SCREENCOPYMONO, proto je radši přeskočte.
- Nastavte barvu popředí a pozadí, operace rastru a bitmapovou průhlednost, kterou chcete pro svůj obrazec použít.
- Použijte ACCEL_SCREENCOPYMONO 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_BACKGROUND. 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_BACKGROUND).
vga_accel(ACCEL_SETOFFSET, int address)
Nastaví offset obrazovky jako funkce vga_setdisplaystart(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_SETOFFSET) offset nastavit kdykoliv později.
To by bylo pro dnešek vše, příště budeme pokračovat v používání akcelerátoru.