Hlavní navigace

SVGAlib (13)

Jakub Matys

V dnešním dílu se podíváme na další funkce využívající síly akcelerátoru. Bude se jednat o ACCEL_SETTRANSPARENCY a ACCEL_SETRASTEROP. Tyto funkce umožňují pracovat s průhledností a s rastrem grafiky. Postupně probereme všechny jejich parametry.

Následující hodnoty mode jsou definovány pro

vga_accel(ACCEL_SETTRANSPARENCY, int mode, ...).

Tato funkce umožňuje používat průsvitnost.

vga_accel(ACCEL_SETTRANSPARENCY, ENABLE_TRANSTAPRENCY_COLOR, int color) 

Kdykoliv jedna z operací vga_accel() chce kreslit pixel v barvě color, operace není provedena a cílový pixel zůstane nezměněn. Tato barva je pak definována jako průhledná.

vga_accel(ACCEL_SETTRANSPARENCY, DISABLE_TRANSPARENCY) 

Tato funkce nemá za úkol nic jiného než zakázat operaci povolenou předchozí funkcí.

vga_accel(ACCLE_SETTRANSPARENCY, ENABLE_BITMAP_TRANSPARENCY) 

V bitmapově rozšířených operacích ACCEL_PUTBITMAP a ACCEL_SCREENCO­PYBITMAP, kdykoliv narazíte na nenastavený bit, není provedena kreslicí operace. Nulové bity nejsou kresleny v barvě pozadí. Místo toho jsou definovány jako průhledné.

vga_accel(ACCEL_SETTRANSPARENCY, DISABLE_BITMAP_TRANSPARENCY) 

Tato funkce, jak sám název napovídá, také zakazuje předchozí.

Hodnoty mode uvedené dále patří funkci

vga_accel(ACCEL_SETRASTEROP, int mode)

která umožňuje pracovat s rastrem grafiky.

vga_accel(ACCEL_SETRASTEROP, ROP_COPY)

Přímé kopírování. Pixely nakreslené vga_accel() nahradí cíl.

vga_accel(ACCEL_SETRASTEROP, ROP_OR)

Logické nebo. Pixely nakreslené pomocí vga_accel()jsou logicky(bit po bitu) porovnány s cílem.

vga_accel(ACCEL_SETRASTEROP, ROP_AND)

Logické a. Pixely nakreslené s vga_accel() jsou bitově porovnány s cílem.

vga_accel(ACCEL_SETRASTEROP, ROP_XOR)

Bitová non-ekvivalence. Pixely nakreslené vga_accel() jsou bitově porovnány s cílem.

vga_accel(ACCEL_SETRASTEROP, ROP_INV)

Inverze. Pixely nakreslené funkcí vga_accel() jsou obráceny. Pixel, který má být přepsán, je jednoduše bitově převácen.

Funkce vga_accel(ACCEL_SET­TRANSPARENCY, int mode, …) nebo vga_accel(ACCEL_SET­RASTEROP, int mode) vrací 0, pokud je volaná funkce platná. Subfunkce vga_ext_set – VGA_AVAIL_ROPMODES a VGA_AVAIL_TRAN­SMODES – umožňují zjistit platné parametry.

Před voláním funkce vga_accel() pro každou operaci zjistěte, zda je podporována:

int vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_ACCEL)

Operace je podporována, pokud je vrácená hodnota logicky (bitově) násobená jednou z následujících předdefinovaných (mají nastaven pouze jediný bit) konstant nenulová.

  • ACCELFLAG_FILLBOX
  • ACCELFLAG_SCRE­ENCOPY
  • ACCELFLAG_PUTIMAGE
  • ACCELFLAG_DRAWLINE
  • ACCELFLAG_SET­FGCOLOR
  • ACCELFLAG_SET­BGCOLOR
  • ACCELFLAG_SET­TRANSPARENCY
  • ACCELFLAG_SET­RASTEROP
  • ACCELFLAG_PUTBITMAP
  • ACCELFLAG_SCRE­ENCOPYBITMAP
  • ACCELFLAG_DRAW­HLINELIST
  • ACCELFLAG_SETMODE
  • ACCELFLAG_SYNC

Volání funkce

int vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_TRANSPARENCY)

nebo

int vga_ext_set(VGA_EXT_AVAILABLE, VGA_AVAIL_ROP)

nebude vracet podporované hodnoty pro rastrové operace a průsvitnost, jak by se očekávalo, ale spíše vrátí hodnoty ACCEL_FLAG_ pro operace akcelerátoru, které odpovídají operaci s rastrem resp. nastavení průsvitnosti.

Dostupnost operací bude většinou záviset na aktuálně nastaveném módu. Neměli byste tedy opomenout nejdříve nastavit potřebný mód a poté teprve testovat jednotlivé operace akcelerátoru.

To by bylo pro dnešek vše. V příštím dílu se podíváme na funkce vga_bitblt, vga_blitwait, vga_fillblt, vga_hlinelistblt a vga_imageblt. Funkce vga_bitblt slouží ke kopírování pixmapy z paměti za pomoci akcelerátoru, vga_blitwait čeká na ukončení operace akcelerátoru a vga_imageblt zase kopíruje pixmapu z systémové paměti do videopaměti.

Našli jste v článku chybu?