Hlavní navigace

SVGAlib (14) - vgagl

Jakub Matys

Po delší pauze se znovu shledáváme u seriálu o SVGALIB. Dnešním dílem začneme probírat další součást svgalib, která je s ní standardně dodávána. Jedná se o knihovnu vgagl. Jak název napovídá, vgagl spojuje "přednosti" OpenGL a VGAlib.

Knihovna vgagl je použitelná pro módy truecolor, hicolor a mód s 256 barvami. Knihovna používá omezený počet funkcí z svgagl, které zajišťují low-level komunikaci s hardwarem.

Svgalib mapuje VGA framebuffer o velikosti 64 k a vgagl tento framebuffer přímo adresuje. Pro SVGA módy, které používají buffery s více než 64 k pro virtuální obrazovku, je při zapisování do fyzické paměti požádováno SVGA stránkování. Tato operace je však prováděna automaticky.

Je možné také používat více virtuálních stránek, ty poté můžete libovolně kopírovat na fyzickou obrazovku. Pro vícebarevné módy (hi, true) je zahrnuta podpora čtyř bytů na pixel (a konverze do tříbytového kontextu).

Jednoduché 256barevné módy (dostupné na všech VGA kartách) mohou být použity s virtuálními obrazovkami, které jsou kopírovány do fyzické paměti (s optimálním page-flippingem). Samozřejmostí je také podpora grafických akcelerátorů (pokud náhodou nevlastníte archaickou videokartu).

Co se týče grafického kontextu, zatím stačí vědět, že to je určitá datová struktura zahrnující informace o velikosti asociované grafické obrazovky, o její organizaci, oříznutí atd. Grafický kontext se definuje funkcí setcontextvir­tual(), kterou můžete vidět na konci článku.

Použití vgagl se neliší od používání jiných knihoven. Na začátek zdrojového souboru musíme zadat příkaz #include <vgagl>. Při překladu je nutné ještě zadat přepínače -lvgagl -lvga (to kvůli slinkování s knihovnou – pro ty, kdo to vidí poprvé:-).

Všechny funkce, které jsou definovány v knihovně, mají předponu gl_. Než však začnete pracovat s knihovnou, musíte mít nastavený grafický kontext, např.:

vga_setmode(G320x200x256);
gl_setcontextvga(G320x200x256);

Po provedení těchto příkazů je kontext nastaven na velikost fyzické obrazovky. Funkce gl_setcontextvga musí být volána až po vga_setmode. Protože knihovna vgagl pracuje pod svgalib, musí se inicializovat až po ní. Parametrem funkce je integer, který označuje mód obrazovky, makra módů jsou definována ve vga.h.

Grafický kontext může být také uložen do proměnné (uloží se samozřejmě typ obrazovky a ne její obsah):

GraphicsContext physicalscreen;
gl_getcontext(&physicalscreen);

Uložení kontextu je realizováno zkopírováním kontextových dat z globální proměnné currentcontext, která je definována ve vgagl.h. Pracovat s proměnnou currnetcontext přímo není doporučeno a mělo by se využívat knihovních maker a funkcí. Definici virtuální obrazovky provedete takto:

gl_setcontextvgavirtual(G320x200x256);

Příkaz alokuje místo pro obrazovku totožnou s 320×200×256 módem a vytvoří pro ní grafický kontext. Virtuální obrazovku můžete nyní zkopírovat na fyzickou obrazovku:

gl_copyscreen(&physicalscreen);

Další funkcí pracující s kontextem je void gl_setcontext(Grap­hicsContext *gc). Tato funkce má, jak sám název napovídá, za úkol nastavit dříve uložený kontext do proměnné currentcontext.

Funkce uvolňující kontext z paměti se nazívá gl_freecontext. Jejím parametrem je ukazatel na odstraňovaný kontext. Funkce vrací typ void.

Pokud potřebujete nastavit velikost kontextu explicitně, např. potřebujete pracovat jen s výřezem obrazovky, můžete použít funkce gl_setcontextwid­th a gl_setcontexthe­ight. Obě funkce vracejí void a jejich parametry jsou integery rozměrů, které požadujete. Rozměry se udávají od levého horního rohu obrazovky (w, h).

Funkce void gl_setcontextvir­tual(int w, int h, int bpp, int bitspp, void *vbuf) definuje aktuální grafický kontext s šířkou w, výškou h, bpp byty na pixel, bitspp významnými barevnými bity na pixel (8, 15, 16, 24) a s ukazatelem na framebuffervbuf. Je tedy možné například nastavit kontext se čtyřmi byty a 24 bity na pixel.

V příštím dílu začneme už pomocí vgagl kreslit jednoduché obrazce. Máte se tedy na co těšit.

Našli jste v článku chybu?

4. 2. 2005 12:41

uživatel si přál zůstat v anonymitě
kontext se definuje funkcí setkontextvirtual() - Nema tam byt nahodou setcontextvirtual ?
Funkce void gl_setcontextvirutal - tu je uz C v poriadku, zasarapatilo vsak T a U - gl_setcontextvirtual
--
Megac



4. 2. 2005 23:53

musis se s dominou nejdriv domluvit jak to chces, to je jasny ze kdyz se ti do pusy nelibi tak si to muzes zaridit :)
120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

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

R2B2 a Hybrid uzavřely partnerství

Vitalia.cz: 7 originálních adventních kalendářů pro mlsné

7 originálních adventních kalendářů pro mlsné

120na80.cz: Boreliózu nelze žádným testem prokázat

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

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

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

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Lupa.cz: Obchod budoucnosti je bez front, košíků i pokladen

Obchod budoucnosti je bez front, košíků i pokladen

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

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

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

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

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

Podnikatelům dorazí varování od BSA

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

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

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

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

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

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

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

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

Jak vymáhat výživné zadarmo?

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

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