Hlavní navigace

SVGAlib: akcelerované kreslení grafiky

Jakub Matys 29. 10. 2004

V dnešním dílu budeme mít na programu dvě oblasti - doděláme joysticky a začneme probírat "akcelerované kreslení grafiky". Ano, je tomu tak, ukážeme si funkce pro obsluhu grafického akcelerátoru.

Nejdříve se podíváme na poslední z funkcí použitelných pro joysticky.

char joystick_getaxis(int joydev, int a);
char joystick_getbutton(int joydev, int b);

Tyto funkce se dotazují na aktuální stav joysticku joydev. Nesmíte zapomenout, že můžete volat funkce až po aktualizaci interních funkcí joystick_update(). Jinak byste pracovali se stejnou hodnotou jako u předchozího volání funkce.

joystick_geta­xis(joydev, a) vrací aktuální stav dané osy (obvykle platí x – 0, y – 1, y – 2 …) v rozmezích –128..127.

joystick_getbut­ton(joydev, b) vrací stav tlačítek. 1 naznačuje stisknuté tlačítko, 0 pak uvolněné.

Pro zjednodušení práce jsou k dispozici také makra preprocesoru:

  • joystick_button1(i) pro joystick_getbut­ton(i, 0).
  • joystick_button2(i) pro joystick_getbut­ton(i, 1).
  • joystick_button3(i) pro joystick_getbut­ton(i, 2).
  • joystick_button4(i) pro joystick_getbut­ton(i, 3).
  • joystick_x(i) pro joystick_getaxis(i, 0).
  • joystick_y(i) pro joystick_getaxis(i, 1).
  • joystick_z(i) pro joystick_getaxis(i, 2).
  • joystick_getb1() pro joystick_getbut­ton(0, 0).
  • joystick_getb2() pro joystick_getbut­ton(0, 1).
  • joystick_getb3() pro joystick_getbut­ton(0, 2).
  • joystick_getb4() pro joystick_getbut­ton(0, 3).
  • joystick_getx() pro joystick_getaxis(0, 0).
  • joystick_gety() pro joystick_getaxis(0, 1).
  • joystick_getz() pro joystick_getaxis(0, 2).

A nyní se už pustíme do slíbeného akcelerátoru.

int vga_accel(unsigned oparation, ...);

Výše napsaná funkce je majoritní funkcí nového rozhraní akcelerátoru. Toto rozhraní bylo obsaženo už ve verzi 1.2.3, jako ústřední bylo však použito mnohem později.

Hlavním cílem je definovat funkce, které mohou být použity jako část složitějších grafických operací. Tyto funkce jsou základem vykreslování grafiky na počítači, umožňují vykreslovat např. čtverce, přímky… Nechoďme kolem horké kaše a podívejme se na některé „akcelerované“ příkazy.

Parametry vga_accel():

vga_accel(ACCEL_FILLBOX, int x, int y, int w, int h)

Příkaz vykreslí jednoduchý vyplněný čtverec na pozici x,y s šířkou w a výškou h v aktuálně vybrané barvě.

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

Kopíruje čtverec o velikosti w x h z pozice x1, y1 na x2, y2.

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

Monochromatické kopírování čtverce. Všechny pixely, které mají nastaveny všechny bity na 0 jsou nakresleny barvou pozadí. Všechny pixely s bity nastavenými na 1 jsou nakresleny barvou popředí. Kvůli podpoře mnoha odlišných architektur není tato rutina definována pro ostatní hodnoty pixelů.

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

Přímý transfer obrázku. Vyplní předávaný čtverec daty z paměti p.

vga_accel(ACCEL_DRAWLINE, int x1, int y1, int x2, int y2) 

Kreslí přímku z x1, y1 do x2, y2 v nastavené barvě.

vga_accel(ACCEL_SETFGCOLOR, int color)

Nastaví barvu popředí. Tato funkce je používána mnoha jinými funkcemi knihovny svgalib.

vga_accel(ACCEL_SETBGCOLOR, int color)

Nastaví barvu pozadí.

To by bylo pro dnešek vše, v příštím dílu budeme pokračovat v obsluze akcelerátoru.

Našli jste v článku chybu?
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

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

Recenze Westworld: zavraždit a...

120na80.cz: Stoná vaše dítě často? Upravte mu jídelníček

Stoná vaše dítě často? Upravte mu jídelníček

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

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

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

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

Podnikatelům dorazí varování od BSA

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

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

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

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

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

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

Horní cesty dýchací. Zkuste fytofarmaka

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

1. den EET? Problémy s pokladnami

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?