Strana 2 z 2
- OpenGL a Direct3D (DirectX) - srovnání výkonu
Poté, co se obě API (Direct3D a openGL) etablovaly na trhu, bylo možno sledovat něco, čemu se dá říkat "API Wars". Nejvíce argumentů se točilo okolo otázky, které API podává vyšší výkon. Tato otázka nabývala na důležitosti i vzhledem k vysokým cenám grafických akcelerátorů a vzhledem k tomu, že Microsoft v té době implementoval obě API. Microsoft pochopitelně vydával své Direct3D API za výkonnější a dokládal to řadou svých vnitropodnikových testů. Velkou ztrátu výkonu openGL zdůvodňoval přesnou specifikací opekl apod...
Tento všeobecně šířený FUD vzal za své v roce 1996 na SIGGRAPH (Special Interest Group on Computer Graphics) conference. Tehdy SGI vyzvala Microsoft na souboj s jejich vlastní implementací optimalizovanou pro Windows zvanou CosmoGL. Následné demonstrace prokázaly, že openGL se Direct3D minimálně vyrovná, v mnoha případech jej však výkonnostně překonává. Tento "souboj" prokázal, žeproklamovaný "špatný" výkon openGL ve windows byl způsoben (?záměrnou?) špatnou implementací opekl Microsoftem, nikoli špatným návrhem openGL. (neopakuje se situace ve Vistě?)
Podstatnější rozdíly ve výkonu obou API se odvíjejí od struktury ovladačů dodávaných výrobci HW. Pod DirectX, ovladače výrobců HW jsou kernel-mode ovladače instalované do operačního systému. User-mode část je pak zajišťována pomocí DirectX runtime poskytovaného společností Microsoft. Naproti tomu pod openGL je ovladač HW dodaný výrobcem rozdělen na user-mode část implementující openGL API a kernel-mode ovladač, kterého volá user-mode část. (Česky řečeno, pod DirectX tvoří celek ovladače 2 společnosti - dodavatel HW + Microsoft, pod openGL je to pouze dodavatel HW).
Problémem je, že volání kernel-mode operací z user-mode vyžaduje přepnutí CPU do kernel-mode. Tato procedura vyžaduje velmi dlouhou dobu (několik mikrosekund) a v této době není CPU schopno provádět žádnou operaci. Proto je třeba maximální optimalizace, aby se počet těchto procedur s CPU snížil na minimum. Například: Pokud je command-buffer grafického jádra plný renderovaných dat, API může jednoduše další volně ukládat do dočasného bufferu, a až je command-buffer Grafického jádra téměř prázdný, může provést změnu kernel-mode a "nasypat" tam nahromaděná volání najednou. Tato optimalizace bývá nazývána jako Marshaling.
Protože ovladače dodávané výrobcem jsou kernel-mode a user-mode je mimo vliv výrobce (Microsoft DX-runtime) nemá výrobce žádnou možnost provedení takovýchto optimalizací. Protože direct3D - user-mode část implementující API, nemůže mít žádné informace o tom, jak funguje "cizí" ovladač, nemůže také efektivně Marshalling podporovat. Z toho vyplývá, že každé Direct3D volání musí provést časově náročný kernel-mode switch. Protože OpenGL HW ovladač výrobce má svoji user-mode část, výrobce má možnost implementovat Marshalling a zvyšovat tak výkon. Pod openGL jsou samozřejmě také prováděny operace přepnutí do kernel-mode, ale teoretické maximum počtu těchto operací pod openGL je rovno standardnímu počtu prováděnému pod Direct3D. Až Direct3D 10 (DirectX10), vývojový "hit" posledních dní, implementuje vlastnosti, které má openGL už léta a umožňuje provozovat části ovladačů v user-mode a umožnit tak Marshalling, čímž se výkon obou API víceméně srovnává.
- OpenGL a Direct3D (DirectX) -
porovnání vlastností a použití
OpenGL vždy nacházelo více využití v profesionální sféře, zatímco Direct3D se zaměřilo pouze na hry. V minulosti většina profesionálních karet podporovala pouze openGL a až v poslední době jsou profesionální karty od ATI, nVidie a Matroxu dodávány s podporou obou API. Důvod pro převahu openGL v profesionálním segmentu je částečně historický. Spousta profesionálních aplikací byla napsána pro IrixGL a provozována na pracovních stanicích SGI a následně portována na openGL. Navíc, jak jsem již zmínil, velká část profesionálních karet podporovala pouze openGL. OpenGL také disponuje velkou škálou vlastností, které i když jsou bezvýznamné pro herní trh, jsou hojně využívány v profesionálních aplikacích.
Direct X naproti tomu nebyl vytvořen se záměrem práce v profesionální grafice a zaměřil se jen na herní segment a vývoj her. Je tedy úzce specializovaným API, zatímco openGL je rozsáhlé API poskytující funkcionalitu pro všechny typy aplikací, nikoli pouze jedné oblasti. Převaha Direct3D v herním segmentu má silné historické kořeny. V dávných dobách 3D hraní byla dominantní silou 3dfx se svým vlastním API Glide. Glide bylo mnohem více nízkoúrovňové než Direct3D a openGL a poskytovalo mnohem vyšší výkon. Vysoký výkon ve hrách byl nejdůležitější vlastností a tak bylo Glide tvůrci her významně preferováno před openGL a Direct3D. S tím jak se HW zrychloval, hrubý výkon API přestával být tak důležitý jako snadnost používání při tvorbě her. Navíc Glide bylo omezeno pouze na HW od 3dfx, a tak se vzrůstající potřebou univerzálního API ztratilo 3dfx své pozice, zejména ve prospěch svého hlavního rivala - nVidii. Za této situace vývojář volil jednu ze dvou HW nezávislých API - Direct3D a openGL.
Velký nárůst popularity Direct3 způsobilo hlavně fakt, že tehdejší implementace openGL bylo mnohem náročnější používat. Použití implementace openGL vyžadovalo zahrnutí úplně celé openGL, tedy i těch částí, které nebyly využívány, protože je HW nepodporoval. Direct3D oproti tomu poskytoval přímý přístup k HW s velmi jednoduchými ovladači, které jednoduše řekly aplikaci, zda daný HW určitou vlastnost podporuje či nikoliv. To mu zaručovalo velmi vysoký výkon, tolik požadovaný herním segmentem. S postupnou implementací funkcionality openGL přímo do HW, přestala být tato nevýhoda aktuální. Dnešní verze openGL zřídkakdy implementují vlastnosti, které by nějaký běžný HW nepodporoval.
Direct3D API je dnes, jako většina produktů Microsoftu, pevně svázána s Windows. Vzhledem k rozšíření Windows a záměrné ne zcela dokonalé implementaci openGL ve Windows Vista má svou budoucnost zatím jistou. "99%" her pro windows platformu jistě použije DX10 a vyšší. Klíč k naprosté herní dominanci se ale může stát pro Direct3D i branou do propadliště dějin. Protože Microsoft svázal tento produkt s Windows, bude budoucnost Direct3D stejná jako je budoucnost Windows, ať už bude jakákoli ...
openGL dnes dospívá do verze 3.0, která bude vydána v dohledné době. Na rozdíl od Direct3D je otevřeným standardem používaných na všech HW i SW platformách a umožňuje tvorbu jak profesionálních aplikací, tak her. Pokud se nestane něco převratného, na platformě Windows již openGL hry neuvidíme a toto API se zůstane doménou pro hry na SonyPlaystation, v Linuxu, či na počítačích Apple. Profesionální segment si jistě podrží, neboť v něm žádného velkého konkurenta vlastně ani nemá. Jelikož openGL stojí na mnoha "nohách", můžeme říct, že její budoucnost je 100% SVĚTLÁ (a nikoli černá, jak čtu v každé druhé diskuzi o grafické kartě). Ať už se ve světě IT sesype jakákoli firma či platforma, vždy tu bude jiná, která OpenGL využívá. Můžete ovšem tohle říct o DirectX, pokud mu podtrhneme jedinou "nohu" na které stojí?
Zdroje:
- OpenGL.org
- khronos.org
- phoronix.com
- wikipedia.org
Některé části článku vznikly jako volný překlad veřejně dostupných informací z uvedených zdrojů
|