Linux se ve v∞t╣in∞ nßvrhov²ch rys∙ dr╛φ UNIXu, jeho╛ auto°i se v╣ak grafikou
nezab²vali (v roce 1972 to nebylo p°φli╣ aktußlnφ). B∞hem dlouholetΘho v²voje
UNIXu vzniklo mnoho vφce Φi mΘn∞ ·sp∞╣n²ch projekt∙, kterΘ majφ za ·kol tento
nedostatek odstranit. V oblasti GUI dnes jednoznaΦn∞ zvφt∞zily X, kterΘ jsem
zmi≥oval p°edminule. Dnes se zam∞°φm zejmΘna na pot°eby programßtor∙ her a
jin²ch multimedißlnφch aplikacφ, kte°φ majφ zcela jinΘ pot°eby, ne╛ pro kterΘ
bylo p∙vodn∞ X11 navr╛eno.
X sv²m nßvrhem p°φli╣ neodpovφdß pot°ebßm dne╣nφch
multimedißlnφch aplikacφ. Odd∞lenφ aplikace a grafickΘho serveru do dvou
nezßvisl²ch program∙ je sice velice dobr² nßpad, ale nenφ zadarmo. Pokud
aplikace chce cokoliv zobrazit, musφ bu∩ pou╛φt primitiv podporovan²ch X
serverem (kterΘ byly navr╛eny pro pot°eby zobrazovßnφ GUI a pro hry se p°φli╣
nehodφ) a nebo si obrßzek nakreslit "u sebe" a pak jej poslat na server. P°itom
je nutnΘ obrßzek zkopφrovat do v²stupnφho bufferu, naΦφst serverem,
p°φpadn∞ zkonvertovat do reprezentace pou╛itΘ videokartou a pak teprve
zobrazit. To znaΦn∞ zdr╛uje a navφc tφm aplikace ztrßcφ ve╣kerou mo╛nost
vyu╛itφ akceleracφ videokarty, kterΘ jsou dostupnΘ jen pomocφ primitiv
podporovan²ch X serverem, kterΘ ale nemajφ ╛ßdnou podporu pro 3D a video.
Prvnφ °e╣enφ se objevilo u╛ v roce 1989 p°idßnφm roz╣φ°enφ jmΘnem MIT-SHM. To
umo╛≥uje sdφlet Φßst pam∞ti mezi X serverem a aplikacφ, kterß se pak pou╛φvß
pro vykreslovßnφ. Dφky tomu se u╣et°φ ve╣kerΘ kopφrovßnφ obrazu p°ed jeho
zobrazenφm a pro pot°eby 2D her v podstat∞ postaΦuje. ProblΘmem z∙stßvß
hardwarovß akcelerace a navφc n∞kterΘ triky Φasto hrami vyu╛φvanΘ (Φekßnφ na
refresh obrazovky, zm∞na grafick²ch re╛im∙ apod.) jsou stßle nedostupnΘ.
Pou╛φvßnφ MIT-SHM je takΘ docela obtφ╛nΘ, proto╛e aplikace by m∞la podporovat
zobrazovßnφ do i t∞ch nejpodivn∞j╣φch hardwar∙, kterΘ X za 15 let svΘ existence
podporovaly. To nenφ snadn² ·kol i p°esto, ╛e X mß docela p∞knou abstrakci
nad formßty.
╪e╣enφm pro 3D grafiku se m∞l stßt PEX, kter² byl vyvinut firmou Digital a
Hewlet Packard v letech 1987-1991. Jednß se o implementaci grafickΘho rozhranφ
jmΘnem PHIGS, kterΘ se m∞lo stßt standardem pro grafickΘ aplikace. Jeho nßvrh
je shodn² s nßvrhem X11 - aplikace posφlß p°φkazy v podob∞ grafick²ch
primitiv (nynφ ale primitiva zahrnujφ 3D funkce) a o jejich zobrazovßnφ se
starß X server. Tento slibn² pokus se ale neujal. Vyjma n∞kolika screen saver∙
neznßm ╛ßdnou aplikaci, kterß by PEX vyu╛φvala a navφc ani X servery v∞t╣inou
nemajφ podporu pro hardwarovou akceleraci p°i zobrazovßnφ.
Rozumnou 3D grafiku p°inesla a╛ firma SGI. Open-GL je specifikace grafickΘho
API podporujφcφ velkΘ mno╛stvφ primitiv vΦetn∞ 3D grafiky. Jejφ implementace
dnes existuje na v╣ech modernφch platformßch a stßvß se de facto standardem.
Lze pou╛φt jak pro psanφ jednoduch²ch 2D aplikacφ, tak i pro opravdovΘ 3D hry
a modelß°e.
SamotnΘ Open-GL specifikuje pouze kreslenφ (a i samotnß inicializace je
zßvislß na platform∞), existuje ale dopl≥kovß knihovna Glut, kterß za°φdφ
zbytek a umo╛≥uje tak psßt opravdu p°enositelnΘ grafickΘ aplikace.
Firma SGI navφc navrhla protokol GLX pro za°azenφ Open-GL do X serveru a
jejich implementace u╛ del╣φ dobu podporuje p°φm² p°φstup aplikacφ k hardwaru.
Open-GL byl ale komerΦnφ standard a SGI neuvolnila jeho free softwarovou implementaci.
Dokonce i nßzev Open-GL mohou nosit jen ty implementace, kterΘ pro╣ly placen²mi testy
na shodu se standardem.
Dφky tomu vznikl projekt Mesa, kter² zahßjil v roce 1995 Brian Paul s cφlem vytvo°it
free softwarovou implementaci Open-GL pro Amigu. Svoji knihovnu v╣ak Open-GL nazvat
nemohl, proto╛e neplßnoval zaplatit poplatky za otestovßnφ a proto ji pojmenoval Mesa.
Dnes ve verzi 3.1 je Mesa plnohodnotnou a i docela rychlou (nejd∙le╛it∞j╣φ funkce jsou
k dispozici i v x86 assembleru s podporou MMX a 3DNOW!) implementacφ Open-GL.
ProblΘmem Mesy ale z∙stala podpora 3D hardware. P°φm² p°φstup k hardwaru z
u╛ivatelskΘ knihovny nejenom odporuje filosofii UNIXu, ale p°inß╣φ i mnohß jinß
·skalφ (Mesa se nesmφ pohßdat s ostatnφmy programy - X serverem apod.). Na
koneΦnΘm °e╣enφ tohoto problΘmu pracuje firma Precision Insight, kterß byla za
tφmto ·Φelem takΘ zalo╛ena.
Na b°ezen je plßnovßna release nov²ch XFree 4.0, kterΘ
budou obsahovat roz╣φ°enφ jmΘnem DRI. To snad bude zprost°edkovßvat jak
renderovßnφ grafick²ch primitiv pomocφ protokolu GLX a Mesy zabudovanΘ do X
serveru, tak i p°φm² p°φstup na hardware s aplikace. Navφc bude podpora 3D
akceleracφ p°φmo v grafickΘm driveru pro XFree, kter² nynφ bude odd∞len² modul.
To znaΦn∞ zjednodu╣φ v²voj grafick²ch driver∙ pod Linuxem a umo╛nφ firmßm
distribuovat drivery i ve form∞ binßrnφch modul∙ pou╛iteln²ch na v╣ech
podporovan²ch platformßch se stejn²m procesorem. Snad se tφm vy°e╣φ problΘm s
nedostatkem driver∙ pro 3D karty.
Prvnφ alphaverze vypadajφ velice slibn∞ a tak doufßm, ╛e se m∙╛eme t∞╣it na 3D
grafiku alespo≥ v kvalit∞ srovnatelnΘ s DirectX pod Windows. Navφc XFree 4.0
slibujφ i mnoho dal╣φch roz╣φ°enφ - podporu pro multithreading (a tak se snad
u╛ nebude kurzor my╣i zastavovat p°i vytφ╛enφ X serveru), true type fonty,
hardwarovΘ p°ehrßvßnφ MPEG animacφ, lep╣φ akcelerace atd.
DGA je dal╣φ roz╣φ°enφ X serveru. Tentokrßt mß za ·kol zprost°edkovat p°φm²
p°φstup do videoram podobn∞ jako DirectDraw interface ve Windows. Jednß se o
roz╣φ°enφ specifickΘ pro XFree, ale nabφzφ docela sch∙dnou cestu jak psßt
fullscreen aplikace (a nebo aplikace pou╛φvajφcφ p°φmΘho p°φstupu pro
zobrazovßnφ v okennφm prost°edφ). Podporuje n∞kterΘ vymo╛enosti jinak v
prost°edφ X nedostupnΘ jako je p°epφnßnφ videom≤d∙ a hardwarov² scroling. Dnes
jej podporuje n∞kolik her (nap°φklad quake) a p°ehrßvaΦ∙ MPEGovΘho videa. CelΘ
API je velice low level a nenφ zrovna nejlΘpe zdokumentovanΘ a tak je dobrΘ se
rozhlΘdnout po n∞kter²ch knihovnßch, kterΘ jej p°ekryjφ.
X nenφ jedinou cestou ke grafice pod Linuxem. Jednφm z nejstar╣φch
alternativnφch metod je SVGAlib. To je jednoduchß knihovna zprost°edkujφcφ
zßkladnφ grafickΘ operace podobn∞ jako grafickΘ knihovny pod DOSem. Pro jejich
provßd∞nφ pou╛φvß p°φmΘho p°φstupu k hardwaru a to je i jejφ hlavnφ slabinou.
Programy pod SVGAlib vy╛adujφ rootovskß prßva a zp∙sobujφ tak potencionßlnφ
security hole. Navφc pokud SVGAlibov² program spadne, Φasto nechß konzoli v
grafickΘm re╛imu a u╛ivatel pak nevidφ, co d∞lß (a Φasto ani nic d∞lat nem∙╛e,
jeliko╛ jeho klßvesnice je zablokovanß). SVGAlib je tak jednou z
nejjednodu╣╣φch metod jak schodit Linuxe.
Dnes se na jejφm v²voji u╛ tΘm∞° nepracuje a tak ani podpora nov²ch videokaret
nenφ valnß. Od verze 1.3.0 ale dokß╛e vyu╛φt VESA BIOS a tak je na v∞t╣in∞
modernφch karet provozuschopnß. Jejφ v²hoda spoΦφvß zejmΘna v jednoduchosti,
nenßroΦnosti a podobnosti DOSovΘmu API a tak ji stßle pou╛φvajφ n∞kterΘ hry.
Poslednφ verze Linuxov²ch kernel∙ p°inesly dal╣φ zajφmavou alternativu. Podpora
emulace textov²ch konzolφ v grafickΘm re╛imu (kterß je stejn∞ nutnß na v∞t╣in∞
ne-intelov²ch platforem, kde textov² re╛im videokarty Φasto v∙bec neumφ) byla
zobecn∞na a kernel nynφ nabφzφ jednoduch² interface pro grafiku. Pomocφ
specißlnφho za°φzenφ /dev/fb? je mo╛nΘ nastavovat grafickΘ re╛imy,
p°istupovat k videopam∞ti a nastavovat paletu. Nenφ v╣ak k dispozici ╛ßdnß
cesta, jak vyu╛φt hardwarov²ch akceleracφ a navφc i podpora grafiky v kernelu
je velice jednoduchß - podporuje n∞kolik znßm∞j╣φch videokaret a VESA
interface.
Velice ambici≤znφm projektem na vy°e╣enφ v╣ech problΘm∙ s grafikou pod Linuxem
je GGI. Jeho primßrnφm cφlem je vytvo°it grafickΘ drivery jako nahrßvatelnΘ
moduly p°φmo do kernelu. Tφm by se zamezilo situacφm, kdy u╛ivatelsk² proces
zprost°edkovßvajφcφ grafiku spadne a kernel nenφ schopen uvΘst konzoli zp∞t do
pou╛itelnΘho stavu. Projekt v╣ak za mnoho let svΘ existence tento cφl splnit
nedokßzal stal se zajφmav² z jin²ch d∙vod∙. Jeho aplikaΦnφ knihovna podporuje
v²stup nejenom do tohoto kernelovΘho interface, ale i do mnoha jin²ch knihoven
- SVGAlib, X11, Windows, AA-lib atd.
SDL je knihovna sna╛φcφ se zjednodu╣it psanφ her (a podobn²ch programu) pod
Linuxem, Win32 a BeOS. P°inß╣φ jednoduch², jednotn² a velmi rychl² p°φstup k
audiu, videu a dal╣φm pot°ebn²m periferiφm. Od nedßvnΘho zve°ejn∞nφ verze 1.0
jejφ popularita stßle stoupß a dnes ji pou╛φvß mnoho nov²ch her. Na v²voji se
valnou Φßstφ podφlφ firma Loki (zab²vajφcφ se v²vojem Linuxov²ch verzφ n∞kter²ch
komerΦnφch her) a jsou k dispozici i n∞kterΘ roz╣i°ujφcφ knihovny - pro
p°ehrßvßnφ MPEG∙, mixovßnφ zvuku, nahrßvßnφ obrßzk∙ apod.
K v²stupu pod Linuxem m∙╛e vyu╛φt bu∩ Xlib, MIT-Shm, nebo DGA.
A pro ty trp∞livΘ, kte°φ doΦetli Φlßnek a╛ sem, proΦ nakonec neuvΘst mΘ osobnφ
a koneΦnΘ °e╣enφ v╣ech problΘm∙ s grafikou pod Linuxem. AA-lib je grafickß
knihovna, kterß ke svΘmu v²stupu pou╛φvß textov² m≤d. Dφky tomu ve╣kerΘ
problΘmy s inicializacφ grafiky a hardwarovou 3D akceleracφ odpadajφ.
Hardwarov∞ akcelerovan² textov² re╛im mß dnes tΘm∞° ka╛dß videokarta a pomocφ
AA-lib m∙╛ete zm∞nit i svoji 386 s herculesem v grafickΘ pracovi╣t∞.
P°edpoklßdßm tedy ze ve╣kerΘ v²╣e zmi≥ovanΘ projekty upadnou brzo v zapomn∞nφ.
Dnes AA-lib podporuje mnoho program∙ a knihoven. Pomocφ GGI m∙╛ete pod AA-lib
spustit X11 a pomocφ AA-VGA n∞kterΘ SVGAlibovΘ aplikace - a zahrßt si Quake v
textovΘm re╛imu zase nenφ tak ╣patn² nßpad.