SVGALIB

aneb

Grafika na konzoli LINUXu


O knihovne,Uzivatelska prirucka,Referencni prirucka

Co je to SVGALIB?

SVGALIB je 'low level' graficka knihovna pro konzole Linuxu. Podporuje radu grafickych karet (Trident, Tseng, Cirrus Logic, Oak, S3 a Mach32 - neni jich mnoho, ale me staci). Soucasti je 'high-level' (spis 'middle') graficka knihovna a knihovny pro praci s mysi a klavesnici. Autorem je T. Frandsen). Knihovna je soucasti instalace SLACKWARE. Je k dispozici na ftp://sunsite.unc.edu/pub/Linux/libs/graphics.


Uzivatelska prirucka

aneb

jak pouzit a pouzivat SVGALIB?

Compilace a linkovani

Do kazdeho souboru, ktery pouziva volani funkci SVGALIB inkludujte vga.h. Pouzivate-li 'high-level' knihovnu inkludujte take vgagl.h. Funkce pro praci s mysi a klavesnici jsou v vgamouse.h a vgakeyboard.h.

Pri linkovani volejte compiler s parametrem -lvga pripadne -lvgagl (ten musi byt pred -lvga).

Priklad:

test: test.o main.o
	cc test.o main.o -lvgagl -lvga -o test

main.o: vga.h main.c
	cc -c main.c -o main.o

test.o: vgagl.h test.c
	cc -c test.c -o test.o

Inicializace a nastaveni videomodu

Na zacatku kazdeho programu zavolejte
vga_init(), ktera detekuje typ karty a inicializuje SVGAlib. Autodetekci se vyhnete funkci vga_setchipset. Funkce vga_getdefaultmode vam vrati obsah promenne shellu GSVGAMODE - nastavit ji muzete napr. export GSVGAMODE=G640x480x256. Tuto hodnotu muzete pouzit pro nastaveni videomodu funkci vga_setmode. K nastaveni textoveho modu na konci programu pouzijte vga_setmode(TEXT).

Informace o videomodu

K tomuto ucelu slouzi spousta funkci. vga_getxdim,vga_getydim a vga_getcolors jsou zakladni. Nejvice informaci Vam da vga_getmodeinfo. Tahle funkce vraci ukazatel na strukturu vgamodeinfo.

Kresleni vlastnimi funkcemi

Standartni VGAcka zpristupnuji procesoru 64kB okna. Nektera umi navic rozlisit okno pro zapis a pro cteni (takze procesor vidi vlastne dve). Novejsi VGAcka jiz podporuji tzv. 'linear addressing', coz je zpristupneni kompletni video pameti procesoru. Co umi vase VGA se dovite pomoci funkci v predchozim odstavci. Linearni adresovani zapneme funkci vga_setlinearaddressing. Stranky prehazujeme vga_setpage, vga_setreadpage nebo vga_setwritepage.

Inicializace vgagl

Nejprve nastavime video mod pomoci vga_setmode a pak zinicializujeme vgagl nastavenim kontextu:
vga_setmode(G320x200x256);
gl_setcontextvga(G320x200x256);

Ted muzeme zacit pouzivat funkce vgagl.

Prepinani kontextu

Graficky kontext muzeme ulozit do promenne typu GraphicsContext pomoci:
GraphicsContext gs;
gl_getcontext(&gs);

Ted muzeme nastavit virtualni kontext:
gl_setcontextvgavirtual(G320x200x256);
Po dokonceni kresleni musime zkopirovat buffer virtualniho kontextu na obrazovku (do videoram):


Referencni prirucka

Referencni prirucka obsahuje seznam funkci, datovych typu, konstant a promennych.

  1. Funkce
  2. Datove typy
  3. scancode, int press)
    Ukazatel na funkci, kterou vola keyboard_update nebo keyboard_waitforupdate.
    typedef void (*__mouse_handler) (int button, int dx, int dy)
    Ukazatel na funkci, kterou vola mouse_update.
    typedef struct vga_modeinfo
    width
    sirka modu v pixlech.
    height
    vyska modu v pixlech.
    bytesperpixel
    pocet bytu na pixel (kdyz 0 tak je to jakysi planar mod, ktery neni kompatibilni s vgagl
    linewidth
    sirka logicke radky
    colors
    pocet barev
    maxlogicalwidth
    maximalni sirka logicke radky
    startaddressrange
    maska bitu, ktere muzete menit pri volbe pocatecni adresy
    maxpixels
    maximalni pocet pixelu umistenych na logicke obrazovce (zavisi na velikosti pameti)
    haveblit
    umi karta BitBlt funkce? Bity:
    0
    Bitblit
    1
    Fillblit
    2
    Imageblit
    flags
    Ruzne flagy:
    Bit 0
    Muzete pouzit jinou page pro zapis a jinou pro cteni.
    Bit 1
    Mod je prokladany.
    Bit 2
    Mod je 'mode-X'(planarnich 256 barev).
    Bit 3
    Dynamicky nahrany modul (?).
    Bit 4
    Muzete nastavit lineani adresovani.
    Bit 5
    Lineani adresovani je zapnuto.
    chiptype
    nastavena nebo detekovana karta.
    memory
    velikost pameti
    linewidth_unit
    pouzivejte je nasobky teto hodnoty pro logickou obrazovku
        typedef struct {
    	struct {
    	    unsigned char red;	/* 6-bit values */
    	    unsigned char green;
    	    unsigned char blue;
    	} color[256];
        } Palette;

  4. Konstanty
  5. Promenne
  6. unsigned char *graph_mem
    ukazatel do 64KB okna videopameti. Stejny ukazatel vraci funkce vga_getgraphmem

    SVGAlib / Karel SOMMER / ksom1377@ss1000.ms.mff.cuni.cz