OpenGL vedle DirectX stále žije - vychází openGL 3 |
Napsal ElCondor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Středa, 14 listopad 2007 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ani s nástupem DirectX10 OpenGL neumírá. Ba možná právě naopak. Podívejme se na OpenGL a jeho budoucnost s pořadovým číslem 3. Kdybych si tento titulek přečetl já, řekl bych si: "A co jako? Vždyť to je přece jasné." Bohužel. Jak tak sleduji diskuze posledních dní, roztočené zejména příchodem grafických karet s podporou DX10 a jejich nekonečným testováním a srovnáváním. Internet snese opravdu všechno. Takže se ani nedivím, že se u určitých uživatel hojně rozšířil nesmyslný názor, že openGL je "mrtvé", nebo odsouzené k pomalému vymizení na okraji zájmu. Podívejme se jak to s openGL je ve skutečnosti a v jakém jsou vztahu s "hitem" posledních dní: DX10 ...
V 80. letech bylo psaní aplikací používající grafický HW neskutečně obtížné. SW vývojáři psali API a ovladače pro každé zařízení zvlášť. To vedlo k neustálému předražování vývoje a duplicitě kódu, kdy mnozí psali něco, co už dávno před nimi napsal někdo jiný pro jiné zařízení. Na počátku 90. let byla v segmentu 3D grafických pracovních stanic firma SGI (Silicon graphics). Jejich IrisGL API se díky svému kvalitnímu návrhu a snadnému používání stalo de-facto průmyslovým standardem. Konkurenti SGI (společnosti jako IBM, HP, SUN), používali pro svůj 3D hardware konkurenční standard PHIGS, který byl považován za částečně zastaralý. Následkem toho se pozice firmy SGI na trhu neustále oslabovala s narůstajícím počtem konkurentů používající standard tento PHIGS. Za této situace přichází SGI s revolučním řešením a rozhodne se proměnit IrixGL na Otevřený standard. Vyústěním těchto snah bylo uvedení OpenGL standardu společností SGI, odvozeného od IrixGL. OpenGL sjednotila přístup k HW, a přesunula odpovědnost za obsluhu HW od vývojářů aplikací směrem k výrobcům HW. Dnes se tento revoluční krok projevuje například existencí ovladače ke grafické kartě a všichni berou ovladače jako samozřejmost. Přesto je to inovace, za niž vděčíme právě vzniku openGL. Jednotná řeč pro všechen možný grafický HW, měla velký pozitivní vliv na vývoj 3D apliací. V roce 1992 SGI podpořila vznik uskupení OpenGL architectural review board (OpenGL ARB), tedy jakousi asociaci společností, která měla zajistit vývoj openGL do budoucna. Jednou z mnoha společností tohoto uskupení byl i Microsoft, který jej ovšem v roce 2003 opustil. Od roku 2006 spravuje openGL skupina Khronos grup. Za všechny možné členy bych zmínil: AMD, Creative Labs, Intel, ID Software, Nvidia, Sony Computer Entertainement, Sun Microsystems, Texas instruments. Společnost Microsoft si tradičně tak trochu hrála na vlastním písečku a tak v roce 1995 vydala vlastní API s názvem Direct3D (část DirectX). Jak už jsem zmínil, po úspěšném prosazení Direct3D na platformu Windows, Microsoft v roce 2003 opouští svou pozici u jednacího stolu o openGL a v nadcházejícím operačním systému Windows Vista, pro jistotu podporu openGL záměrně ořeže.
Tyto dvě API, ačkoli přinesly podobnou funkcionalitu, byly postaveny na naprosto protichůdných myšlenkách. Direct3D bylo navrženo jako 3D HW rozhraní. Jeho vlastnosti se odvíjí od toho, jaké vlastnosti poskytuje HW. Na druhou stranu openGL bylo postaveno jako 3D renderující systém, který může být HW akcelerován. Zatímco direct3D vyžaduje, aby aplikace sama spravovala HW prostředky, OpenGL má implementaci, která to udělá za ní (za aplikaci). To způsobuje, že je mnohem jednodušší pracovat pomocí openGL API. Vývojář pracující s Direct3D musí HW prostředky spravovat sám. Jak je vidět, tenhle zaostalý přístup k HW, který Microsoft vynalezl v dobách DOSu, nás tady bude strašit ještě dlouho. Nicméně, toto nesystémové řešení má jednu nezanedbatelnou výhodu. Vývojáři mají možnost spravovat HW zdroje způsobem, který se jim zdá zrovna pro tu jednu jejich aplikaci nejvýhodnější, což je u počítačových her výhoda jistě lákavá. Dalším rozdílem mezi těmito API, byl způsob, jakým nakládaly s renderováním textur. Zde se přístup Direct3D osvědčil mnohem více, zatímco implementace openGL byla poměrně nešikovná. Tento problém byl ovšem v openGL vyřešen a dnešní verze obou API maji k renderování textur podobný přístup.
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á.
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:
Některé části článku vznikly jako volný překlad veřejně dostupných informací z uvedených zdrojů
Pouze registrovaní uživatelé mohou přidat komentář! |