Hlavní navigace

SVGAlib

Jakub Matys 13. 8. 2004

Vítám vás u nového seriálu, který se bude zabývat grafickou knihovnou svgalib. V následujících několika článcích společně probereme řadu funkcí, které nám knihovna nabízí. V dnešním dílu se podíváme i na to, jak knihovnu inicializovat a nastavit grafický mód...

Svgalib je nízkoúrovňová grafická knihovna pro Linux. Je určena pro programátory vyvíjející programy v textovém módu, kteří potřebují pracovat s grafickými prvky s určitým komfortem (příkladem mohou být hry).

Knihovna vychází z VGAlib, která podporovala mnoho standardních VGA módů. Svgalib přebrala podporu těchto módů a přidala podporu některých grafických čipsetů. Díky těmto ovladačům je možné pracovat i ve vyšších rozlišeních (např. SVGA ;)). Také byly opraveny chyby v knihovně VGAlib, některé byly např. způsobeny zpracováváním signálů SIGEGV, SIGFPE, SIGILL a dalších.

Knihovna interně používá signálů SIGUSR1 a SIGUSR2 k přepínání konzole, pokud potřebujete signály používat k jiné činnosti, můžete editovat hlavičkový soubor libvga.h a poté knihovnu znovu přeložit. Veškerá instalační nastavení se přepisují v souboru Makefile.cfg a samotná kompilace a instalace se spustí příkazem make install. Další informace ohledně nastavení naleznete v instalační dokumentaci.

Jako u každého programu v C je nutné uvést na začátek kódu příslušný hlavičkový soubor. Pro svgalib je to #include <vga.h>, pokud nebudete používat myš a nebufferovanou klávesnici. Před započetím práce s knihovnou je nutné nejprve provést inicializaci. O to se postará funkce vga_init() (pozn.: všechny funkce z balíku svgalib mají předponu vga_), která provede detekci čipsetu a nastaví práva superuživatele. Deklarace funkce je:

int vga_init(void);

Vrací –1, pokud nemůže alokovat grafický subsystém, nebo 0, pokud je vše v pořádku. Chcete-li se vyhnout autodetekci, musíte před inicializací nastavit čipset sami. K tomuto účelu slouží fukce void vga_setchipset(int chipset);. Místo čísla čipsetu můžete použít symbolickou konstantu – ty jsou definovány ve vga.h. Podrobnější informace k čipsetům získáte v manuálových stránkách a v dokumentaci.

Po inicializaci je ještě nutné nastavit správný video mód. Mód může být textový (tj. 25×80 znaků), nebo grafický. U grafického módu můžete nastavit rozlišení a barevnou hloubku. Názvy grafických módů začínají písmenem G, následuje rozlišení (např. 640×480) a barevná hloubka. Takže nám vychází třeba G640×480×256. Než se naučíme mód nastavovat, ukažme si několik funkcí k zjištění módu (ať už aktuálního, či nějakého jiného).

int vga_getdefaultmo­de(void); slouží k získání čísla výchozího módu, který je uložen v systémové proměnné SVGALIB_DEFAUL­T_MODE. Není-li tato proměnná definována, vrátí funkce –1.

Následující dvě funkce mají za úkol převádět čísla módů na jejich jména a naopak.

char *vga_getmodename(int mode);
int vga_getmodenumber(char *name);

Další z funkcí zjišťujících informace je vga_modeinfo *vga_getmodein­fo(int mode);. Tato funkce zapisuje informace o módu do struktury vga_modeinfo. Jednotlivé položky struktury:

typedef struct {
 int width;
 int height;
 int bytesperpixel;
 int colors;
 int linewidth;
 int maxlogicalwidth;
 int startaddressrange;
 int maxpixels;
 int haveblit;
 int flags;
/* Extended fields, not always available: */
 int chiptype;
 int memory;
 int linewidth_unit;
 char *linear_aperture;
 int aperture_size;
 void (*set_aperture_page) (int page);
 void *extensions;
} vga_modeinfo;

Více informací o struktuře získáte v manuálových stránkách funkce. Pokud je číslo módu větší než rozsah, vga_getmodeinfo() vrací NULL.

int vga_getcurren­tmode(void); vrací číslo aktivního módu.

A konečně funkce, která vám umožní nastavit video mód – int vga_setmode(int mode);. Pokud se jedná o grafický mód, nejen že ho nastaví, ale dokonce obrazovku vyčistí (clears the screen). Nastavení módu by mělo být první akcí po inicializaci knihovny. Funkce vrací 0 při úspěšném nastavení módu, jinak –1.

Tyto funkce by měly představovat základ. Příště se podíváme na jiné funkce, které nám umožní další a další nastavení.

Našli jste v článku chybu?

29. 4. 2007 15:37

archdrone (neregistrovaný)
Mam dojem, ze se spousta materialu z tohoto clanku nebezpecne blizi prostemu prekladu man svgalib a man vgagl..to by ani tak nevadilo, ale chybi mi tu nejaky priklad, jen tak nasazet funkce do clanku neni moc nazorne. Nicmene svgalib vypada na skvelou knihovnu, ktera mi pripomina leta stravena v dosu, ikdyz ma par neprijemnych vlastnosti (treba nutnost spoustet binarky pod rootem).

13. 8. 2004 16:15

hkmaly (neregistrovaný)

1) emerge svgalib ... kdo potrebuje stranky ? Ale dobre ... http://www.svgalib.org/

2) misto setuid se ted pouziva modul svgalib_helper.
Mozna ze toho moc nepribylo, ale to muze znamenat ze uz vsechno chodi a staci pridavat podpory novych karet (coz se deje) ...

3) Hello world by v tomhle pripade byl blby napad, obavam se ze svgalib nepodporuje praci s fonty ...

4) Ano, taky si myslim ze tento popis je nelogicky. Coz nic nemeni na tom, ze dokud bude framebuffer pomalejsi nez textovy mo…






DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

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

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

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

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

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

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

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

Podnikatelům dorazí varování od BSA

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

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

Recenze Westworld: zavraždit a...

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

Jsou čajové sáčky toxické?

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

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: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

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

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

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí