(3D) Grafika a video pod Linuxem


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.

X11

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.

MIT-Shm

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.

PEX

╪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φ.

Open-GL

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.

Mesa

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.

XFree 4.0 a Direct Rendering Infrastructure

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

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φ.

SVGAlib

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.

Frame buffer

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.

GGI

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

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.

AA

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.