Porovnání OpenGL a Direct3D - Comparison of OpenGL and Direct3D

Direct3D a OpenGL jsou konkurenční rozhraní pro programování aplikací (API), která lze použít v aplikacích k vykreslování 2D a 3D počítačové grafiky . Od roku 2005 jednotky pro zpracování grafiky (GPU) téměř vždy implementují jednu verzi obou těchto API. Mezi příklady patří: DirectX 9 a OpenGL 2 přibližně 2004; DirectX 10 a OpenGL 3 přibližně 2008; a nejnověji DirectX 11 a OpenGL 4 kolem roku 2011. GPU, které podporují novější verze standardů, jsou zpětně kompatibilní s aplikacemi, které používají starší standardy; například lze spustit starší hry DirectX 9 na novějším GPU certifikovaném pro DirectX 11.

Dostupnost

Vývoj aplikací Direct3D se zaměřuje na platformu Microsoft Windows .

OpenGL API je otevřený standard, což znamená, že různí výrobci hardwaru a vývojáři operačních systémů mohou volně vytvářet implementaci OpenGL jako součást svého systému. Implementace OpenGL existují pro širokou škálu platforem. Nejpozoruhodnější je, že OpenGL je dominujícím grafickým API v unixových počítačových systémech.

Z pohledu vývojáře aplikací jsou Direct3D a OpenGL stejně otevřené; je k dispozici úplná dokumentace a potřebné vývojové nástroje bez omezení.

API Podpora pro stolní počítače Podpora vestavěného systému Licence
Direct3D Microsoft Windows , Xbox Windows Embedded , Windows CE (prostřednictvím Direct3D Mobile ) Proprietární
OpenGL Cross-platform Cross-platform prostřednictvím OpenGL ES Otevřený standard, některé funkce patentovány

Podrobněji jsou dvě rozhraní API pro počítačovou grafiku následující:

  1. Direct3D je proprietární API od společnosti Microsoft, které poskytuje funkce pro vykreslování dvojrozměrné (2D) a trojrozměrné (3D) grafiky a využívá hardwarovou akceleraci, je-li na grafické kartě k dispozici. Byl navržen společností Microsoft Corporation pro použití na platformě Windows .
  2. OpenGL je otevřené standardní API, které poskytuje mnoho funkcí pro vykreslování 2D a 3D grafiky, a je k dispozici ve většině moderních operačních systémů, mimo jiné včetně Windows , macOS a Linux .

Všimněte si toho, že mnoho základních rozšíření a metod OpenGL , i když jsou zdokumentovány, jsou také patentovány, což způsobuje vážné právní potíže s jejich implementací (viz problémy s Mesa ).

OpenGL a Direct3D jsou implementovány v ovladači zobrazovacího zařízení . Významným rozdílem však je, že Direct3D implementuje API do běžného běhu (dodávaného společností Microsoft), což zase hovoří o rozhraní DDI ( low-level device driver interface ). S OpenGL každý dodavatel implementuje úplné API do ovladače. To znamená, že některé funkce API se mohou od jednoho dodavatele k druhému mírně lišit. Kompilátory GLSL shader různých dodavatelů také vykazují mírně odlišné chování. Následující text porovnává dvě rozhraní API strukturovaná podle různých hledisek, která jsou většinou relevantní pro vývoj her.

Přenosnost

Proprietární Direct3D je oficiálně realizován pouze v systému Windows rodiny Microsoft operačních systémů, včetně vložených verzí používaných v Xbox rodiny herních konzolí a Sega je Dreamcast . Několik většinou funkčních reimplementací rozhraní Direct3D API bylo provedeno třetími stranami, jako je například Wine , projekt na přenos běžných rozhraní Windows API do operačních systémů podobných Unixu, a Cedega , proprietární vidlice Wine. Tento proces je však postupně omezován kvůli vzájemné závislosti DirectX na mnoha dalších proprietárních komponentách Windows a protože proprietární povaha Direct3D vyžaduje obtížný proces reverzního inženýrství .

OpenGL má implementace dostupné na mnoha platformách včetně Microsoft Windows, unixových systémů, jako je Mac OS X , Linux . Nintendo a Sony vyvinuly vlastní knihovny, které jsou podobné, ale ne identické s OpenGL. Jako hlavní grafickou knihovnu pro Android , BlackBerry , iOS a Symbian byla ve formě OpenGL ES vybrána podmnožina OpenGL .

Ovladač Microsoft OpenGL poskytuje hardwarovou akceleraci v systému Windows Vista; podpora byla zrušena v systému Windows XP, brzy poté, co koncem 90. let minulého století nedokázali poskytnout nízkou úroveň podpory Fahrenheit graphics API pro fúzi OpenGL-Direct3D. Hardwarové akcelerace OpenGL v systému Windows je dosaženo tím, že uživatelé nejprve nainstalují instalovatelné klientské ovladače (ICD) vyvinuté tvůrci GPU . Tyto ICD jsou prakticky ve všech případech dodávány se standardním balíčkem pro stahování ovladačů od dodavatele hardwaru (IHV), takže k zajištění hardwarové podpory OpenGL stačí instalace nejnovějších grafických ovladačů.

Nověji projekt téměř nativní grafické vrstvy ( ANGLE ) společnosti Google poskytuje prostředky pro převod volání aplikací OpenGL ES 2.0 na DirectX 9 . To se provádí tak, že WebGL (podmnožina varianty OpenGL pro web) může běžet na společném běhovém prostředí Direct3D, což znamená, že mezi dodavateli budou menší rozdíly.

Snadnost použití

Direct3D

První verze Direct3D v roce 1996 vzbudila širokou kritiku, protože i jednoduché operace, jako například změny stavu, vyžadovaly vytváření a odesílání objektů nazývaných prováděcí vyrovnávací paměti . Naproti tomu v OpenGL lze většinu změn stavu provést jedním voláním funkce. Model Direct3D frustroval mnoho programátorů. Velmi slavnou stížnost vznesl vysoce postavený vývojář her John D. Carmack ve svém .plansouboru, ve kterém vyzval Microsoft, aby opustil Direct3D ve prospěch OpenGL. Carmack vysvětlil: „OpenGL se snadno používá a je zábavné s ním experimentovat. D3D není ... Mnoho věcí, které tvoří jeden řádek kódu GL, vyžaduje polovinu stránky kódu D3D - alokovat strukturu, nastavit velikost, vyplnit něco, zavolejte rutinu COM a extrahujte výsledek. " Chris Hecker učinil podobnou žádost v „Otevřeném dopise společnosti Microsoft“ v časopise Game Developer Magazine od dubna do května 1997.

Verze 5 (druhá verze, pojmenovaná podle vydání v rámci DirectX 5) nahradila prováděcí vyrovnávací paměti novým rozhraním API DrawPrimitive, ale stále byla považována za těžkopádnou. Chris Hecker „Otevřený dopis společnosti Microsoft“ označil DrawPrimitive za „nezralý a špatně navržený klon OpenGL, kterému chybí některá architektonická rozhodnutí, díky nimž je OpenGL rychlý“.

Navzdory kontroverzi Microsoft pokračoval ve vývoji API. Podrobná historie vydání a přidaných funkcí je uvedena na webových stránkách Microsoft Direct3D.

Někteří bývalí kritici Direct3D uznávají, že nyní je Direct3D schopnostmi a snadným používáním stejně dobrý, ne -li lepší než OpenGL. V lednu 2007 John Carmack řekl, že „… DX9 je opravdu docela dobrá úroveň API . I přes stránku věcí Direct3D , kde vím, že mám dlouhou historii lidí, kteří si myslí, že jsem proti tomu antagonistický. Microsoft udělal hodně „Velmi dobrá práce s rozumným vývojem v každém kroku - nemají obavy z porušení zpětné kompatibility - a je to docela čisté API. Obzvláště se mi líbí práce, kterou dělám na 360, a je to pravděpodobně nejlepší grafické API jako pokud jde o rozumně navrženou věc, se kterou jsem pracoval. “

Některé konstrukční funkce Direct3D zůstaly od verze jedna nezměněny, zejména její závislost na modelu Component Object Model (COM) společnosti Microsoft . Jednou z výhod používání COM je, že API lze použít v jakémkoli jazyce, který zná COM, zejména Object Pascal ( Delphi ) a Microsoft Visual C ++ , C# a Visual Basic .NET .

OpenGL

OpenGL je specifikace implementovaná v programovacím jazyce C , i když ji lze použít i v jiných jazycích. Je postaven na konceptu stavového stroje . Jako API OpenGL závisí na žádné funkci programovacího jazyka a lze jej vyvolat z téměř jakéhokoli jazyka se správnými vazbami. Takové vazby existují pro většinu současných programovacích jazyků.

Srovnání

Direct3D je obecně určen k virtualizaci 3D hardwarových rozhraní. Direct3D osvobozuje programátora hry od umístění grafického hardwaru. OpenGL je naproti tomu navržen jako 3D hardwarově akcelerovaný vykreslovací systém, který lze emulovat v softwaru. Tato dvě API jsou zásadně navržena podle dvou oddělených způsobů myšlení.

Jako takové existují funkční rozdíly v tom, jak tato dvě rozhraní API fungují. Jeden funkční rozdíl mezi API je v tom, jak spravují hardwarové prostředky. Direct3D očekává, že to aplikace udělá, OpenGL to provede implementací. Tento kompromis pro OpenGL snižuje potíže s vývojem pro API a současně zvyšuje složitost vytváření dobře fungující implementace (nebo ovladače). S Direct3D musí vývojář spravovat hardwarové prostředky nezávisle; implementace je však jednodušší a vývojáři mají flexibilitu alokovat prostředky nejefektivnějším možným způsobem pro svou aplikaci.

Zhruba do roku 2005 byl dalším funkčním rozdílem mezi API způsob, jakým zpracovávali vykreslování do textur. Metoda Direct3D ( SetRenderTarget()) je výhodná, zatímco předchozí verze OpenGL vyžadovaly manipulaci s pixelovými buffery (P-buffery). To bylo těžkopádné a riskantní: pokud by se kódová cesta použitá v programu lišila od té, kterou očekával výrobce ovladačů, kód by se vrátil k vykreslování softwaru, což by způsobilo podstatný pokles výkonu. Široká podpora rozšíření objektů vyrovnávací paměti rámců , která poskytovala OpenGL ekvivalent metody Direct3D, však tento nedostatek úspěšně vyřešila a funkce vykreslení cíle OpenGL ji v tomto aspektu srovnala s Direct3D.

Kromě několika drobných funkčních rozdílů, které byly většinou vyřešeny v průběhu let, poskytují tato dvě rozhraní API téměř stejnou úroveň funkcí. Výrobci hardwaru a softwaru obecně rychle reagují na změny v DirectX , např. Požadavky na pixelový procesor a shader v DirectX 9 pro streamování procesorů v DirectX 10, na teselaci v DirectX 11. Naproti tomu nové funkce v OpenGL obvykle implementují nejprve prodejci a poté zpětně aplikována na standard.

Výkon

Krátce po vzniku Direct3D a OpenGL jako životaschopných grafických knihoven (kolem roku 1995) se společnosti Microsoft a SGI zapojily do takzvaného „ API Wars“. Velká část argumentu se točila kolem toho, které API nabízí vynikající výkon. Tato otázka byla relevantní vzhledem k velmi vysokým nákladům na vyhrazené grafické procesory během této doby, což znamenalo, že spotřebitelský trh používal softwarové renderery implementované společností Microsoft pro Direct3D i OpenGL.

Raná debata

DOS obchodní software, jako je AutoCAD a DOS her, jako id Software ‚s Quake původně měl být optimalizován pro běh na mnoha různých grafických čipsetů. Když výrobci hardwaru, jako je 3Dlabs (člen OpenGL Architecture Review Board ), vyrobili grafické akcelerátory kompatibilní s OpenGL (např. Čip GLint), vývojáři jako John Carmack z id Software optimalizovali své produkty pro OpenGL. Jak převládala multitaskingová uživatelská prostředí, jako jsou Windows a X Window System (X11) na unixových systémech, relevance tohoto hardwaru se vytrácela.

Společnost Microsoft uvedla Direct3D na trh jako rychlejší na základě interního srovnání výkonu těchto dvou softwarových knihoven. Deficit výkonu byl obviňován z přísné specifikace a shody požadované od OpenGL. Toto vnímání bylo změněno na konferenci 1996 Special Interest Group on GRAPHics and Interactive Techniques ( SIGGRAPH ). V té době společnost Silicon Graphics (SGI) vyzvala společnost Microsoft s vlastní optimalizovanou implementací softwaru OpenGL pro systém Windows OpenGL s názvem CosmoGL, která se v různých ukázkách shodovala nebo překračovala výkon Direct3D. Pro SGI to byl zásadní milník, protože ukázal, že špatný výkon vykreslování softwaru OpenGL byl způsoben referenční implementací OpenGL od Microsoftu, a ne kvůli údajným chybám v designu v OpenGL.

Naproti tomu vykreslování softwaru pomocí 3D API bylo do značné míry irelevantní pro aplikace Direct3D i OpenGL. Mnoho aplikací DirectX nepoužívalo vykreslování softwaru Direct3D, pro přístup k hardwaru displeje upřednostňovalo provádění vlastního vykreslování softwaru pomocí zařízení DirectDraw . Pokud jde o aplikace OpenGL, očekávala se hardwarová podpora a hardware byl tak rychlejší, že záložní software aplikace OpenGL představoval pro vývojáře OpenGL hrubé překvapení.

V každém případě, v době, kdy SGI předvedla, že výkon vykreslování softwaru OpenGL může být konkurenceschopný s výkonem Direct3D, se vykreslování softwaru rychle stalo irelevantním kvůli široké dostupnosti levného 3D grafického hardwaru. V roce 1998 byl dokonce grafický akcelerátor S3 ViRGE podstatně rychlejší než nejrychlejší Pentium II s rasterizerem MMX Direct3D .

Řazení

Podstatnější a modernější rozdíl ve výkonu vzniká kvůli struktuře ovladačů hardwaru poskytovaných vývojáři hardwaru. V rozhraní DirectX jsou ovladače nezávislého dodavatele hardwaru (IHV) ovladače v režimu jádra nainstalované do operačního systému. Část API v uživatelském režimu má na starosti běhové prostředí DirectX poskytované společností Microsoft. V rámci OpenGL je však ovladač IHV rozdělen na dvě části: část v uživatelském režimu, která implementuje API OpenGL, a ovladač v režimu jádra, který je volán částí v uživatelském režimu.

To je problém, protože volání operací v režimu jádra z uživatelského režimu vyžaduje provedení systémového volání (tj. Přepnutí procesoru do režimu jádra). Jedná se o pomalou operaci, jejíž dokončení trvá v řádu mikrosekund . Během této doby nemůže CPU provádět žádné operace. Minimalizace počtu přepnutí této operace by zlepšila výkon. Pokud je například vyrovnávací paměť příkazů GPU plná dat vykreslování, rozhraní API by mohlo jednoduše uložit požadované volání vykreslování do dočasné vyrovnávací paměti a když je vyrovnávací paměť příkazů téměř prázdná, může provést přepnutí do režimu jádra a přidat sadu uložených příkazů v dávce. Toto se nazývá zařazování .

Protože ovladače Direct3D IHV jsou v režimu jádra a kód uživatelského režimu je mimo dosah IHV, není šance, že by k těmto optimalizacím došlo. Protože modul runtime Direct3D, část v uživatelském režimu, která implementuje API, nemůže mít explicitní znalosti o vnitřním fungování ovladače, nemůže účinně podporovat zařazování. To znamená, že každé volání Direct3D, které odesílá příkazy hardwaru, musí provést přepínač režimu jádra, což opět trvá určitý čas v řádu mikrosekund. To vedlo k několika chování ohledně používání Direct3D, přičemž nejdůležitější je potřeba odesílání velkých dávek trojúhelníků v jednom volání funkce.

Vzhledem k tomu, že ovladače IHV OpenGL mají součást v uživatelském režimu, IHV mají schopnost implementovat zařazování, čímž se zlepšuje výkon. Přepínání v režimu jádra stále existuje, ale teoretický maximální počet přepínačů v implementacích OpenGL se jednoduše rovná standardnímu chování Direct3D.

Direct3D 10 , verze dodávaná se systémem Windows Vista , umožňuje, aby části ovladačů běžely v uživatelském režimu, což IHV umožňuje implementovat seřaďování, čímž se oba dostanou zpět do relativní parity výkonu. Systém OpenGL systému Mac OS X je velmi podobný, kde IHV implementují jednodušší verzi rozhraní OpenGL API (s komponentami režimu uživatele i jádra) a doplňky společnosti Apple k modulu runtime poskytují přímé rozhraní k uživatelskému kódu a základní práci usnadnit práci IHV.

Závod s nulovým řidičem nad hlavou

Zavedení Mantle AMD vedlo ke zvýšené diskusi o modernizaci API, a aktualizaci koncepty abstrakce všemi API používají, aby odrážel grafický procesor (GPU) se operace. Prodejci společnosti Microsoft i OpenGL začali předvádět své vize omezení nebo úplného odstranění režie ovladače (množství práce, kterou musí CPU vykonat při přípravě příkazů GPU).

V březnu 2014 představila společnost Microsoft základní předpoklady a cíle pro komponentu DirectX12 3D (bude připravena na prosinec 2015). Prodejci OpenGL zvolili jiný přístup a během GDC 2014 představili kombinaci povinných funkcí v OpenGL 4.3 a OpenGL 4.4 nebo již ARB rozšíření, aby ukázali rychlé cesty, které již existují v implementacích od Nvidia, AMD a Intel. Později AMD darovalo Mantle společnosti Khronos Group , API bylo přejmenováno na Vulkan a nyní je toto současné multiplatformní API určené ke snížení režie řidičů a lepší distribuci práce mezi více jader CPU a GPU pomocí jednotné správy výpočetních jader a grafických shaderů .

Během prezentace byl představen apitest . Jedná se o nový nástroj pro mikrobenchmarking specifických řešení pro dané problémy s důrazem na zkoumání rychlých cest v aktuálních API. Podporovány jsou OpenGL 4.x i Direct3D 11. Shromážděné výsledky ukázaly, že moderní OpenGL může být mnohokrát rychlejší než Direct3D 11.

Struktura

OpenGL, původně navržený pro tehdy výkonné pracovní stanice SGI, obsahuje mnoho funkcí, jako je stereofonní vykreslování a zobrazovací podmnožina , které byly obecně považovány za omezené použití pro hry, přestože stereoskopické hraní vzbudilo větší zájem o vývoj 3D displejů na spotřebitelské úrovni. API jako celek obsahuje asi 250 hovorů, ale pro vývoj her je užitečná pouze podmnožina snad 100. Nikdy však nebyla definována žádná oficiální podmnožina specifická pro hry. Jako výchozí bod mohl posloužit MiniGL, vydaný společností 3Dfx jako přechodné opatření na podporu GLQuake , ale hry brzy přijaly další funkce, jako je šablona , a podpora plného standardu OpenGL pokračovala. Pracovní stanice a spotřební stroje dnes používají stejnou architekturu a operační systémy, a tak moderní verze standardu OpenGL tyto funkce stále obsahují, ačkoli je zrychlují pouze speciální grafické karty třídy pracovní stanice.

Rozšíření

Mechanismus rozšíření OpenGL je pravděpodobně nejvíce sporným rozdílem mezi těmito dvěma API. OpenGL obsahuje mechanismus, kde jakýkoli ovladač může inzerovat svá vlastní rozšíření do API, a tak zavádí nové funkce, jako jsou režimy prolnutí, nové způsoby přenosu dat do GPU nebo různé parametry zalamování textur. To umožňuje rychlé odhalení nových funkcí, ale může vést ke zmatku, pokud různí dodavatelé implementují podobná rozšíření s různými API. Mnoho z těchto rozšíření je pravidelně standardizováno radou OpenGL Architecture Review Board (ARB) a některá jsou hlavní součástí budoucích revizí OpenGL.

Na druhou stranu je Direct3D určen pouze jedním dodavatelem ( Microsoft ), což vede ke konzistentnějšímu API, ale odmítá přístup k funkcím specifickým pro dodavatele. Technologie UltraShadow společnosti NVIDIA například není v době psaní k dispozici ve standardních API Direct3D. Direct3D podporuje rozšíření formátu textur (přes FourCC ). Ty byly kdysi málo známé a zřídka používané, ale nyní se používají pro kompresi textur S3 .

Když grafické karty přidaly podporu pro pixelové shadery (v OpenGL známé jako „fragmentové shadery“), Direct3D poskytl jeden standard „Pixel Shader 1.1“ (PS1.1), se kterým kompatibilitu inzerovala GeForce 3 a vyšší a Radeon 8500 a vyšší. V rámci OpenGL byly ke stejným funkcím přistupovány prostřednictvím řady vlastních rozšíření.

Přístup společnosti Microsoft teoreticky umožňuje jednu cestu kódu pro podporu obou značek karet, zatímco pod OpenGL musí programátoři napsat dva samostatné systémy. Ve skutečnosti však kvůli omezením zpracování pixelů těchto raných karet Pixel Shader 1.1 nebyl nic jiného než jazyková verze rozšíření OpenGL specifická pro NVIDIA. Většinou jediné karty, které požadovaly funkčnost PS 1.1, byly od společnosti NVIDIA, a to proto, že byly pro ni vytvořeny nativně. Když byl Radeon 8500 vydán, společnost Microsoft vydala aktualizaci Direct3D, která obsahovala Pixel Shader 1.4, což nebylo nic jiného než pseudonákladová jazyková verze rozšíření OpenGL specifických pro ATI . Jediné karty, které požadovaly podporu PS 1.4, byly karty ATI, protože byly navrženy s přesným hardwarem potřebným k uskutečnění této funkce.

Tato situace existovala pouze na krátkou dobu pod oběma API. Karty stínování pixelů druhé generace fungovaly mnohem podobněji, přičemž každá architektura se vyvíjela směrem ke stejnému závěru zpracování pixelů. Pixel Shader 2.0 jako takový umožnil jednotnou cestu kódu pod Direct3D. Přibližně ve stejnou dobu představil OpenGL vlastní rozšíření vrcholů a shaderů schválených ARB ( GL_ARB_vertex_programa GL_ARB_fragment_program) a obě sady karet tento standard také podporovaly.

Uživatelé

Profesionální grafika

OpenGL vždy viděl větší využití na profesionálním grafickém trhu než DirectX, zatímco DirectX se používá většinou pro počítačové hry. (Termín profesionál se zde používá k označení profesionální produkce a zobrazení grafiky, například v počítačových animovaných filmech a vědecké vizualizaci, na rozdíl od her, kde jsou vyrobené grafiky určeny pro osobní, nikoli profesionální použití koncového uživatele.) V současné době mají OpenGL i DirectX dostatečně velký přesah ve funkcích, které lze použít pro většinu běžných účelů, přičemž hlavním kritériem, které určuje, je často operační systém; DirectX je běžnou volbou pro Windows a OpenGL pro téměř všechno ostatní. Některé ezoterické aplikace stále dělí použitelnost těchto dvou API: dělat zrychlené 3D přes síťové připojení je například přímo podporováno OpenGL například s OpenGL Extension to X Window System ( GLX ).

V minulosti mnoho profesionálních grafických karet podporovalo pouze OpenGL. Od roku 2010 budou Direct3D podporovat prakticky všechny profesionální karty, které fungují na platformě Windows. Součástí toho byla změna na profesionálním grafickém trhu z převážně unixového hardwaru, jako jsou SGI a Suns, na levnější systémy založené na PC, což vedlo k růstu Windows v tomto tržním segmentu a současně poskytlo nový trh pro software OpenGL v unixových spotřebitelských systémech se systémem Linux nebo Mac OS X.

Hlavním historickým důvodem dominance OpenGL na profesionálním trhu byla výkonnost. Mnoho profesionálních grafických aplikací (například Softimage | 3D, Alias PowerAnimator ) bylo původně napsáno v IRIS GL pro špičkové pracovní stanice SGI, které byly mnohem schopnější, graficky i v surovém výkonu CPU, než tehdejší PC. Později byly mnohé z nich přeneseny do OpenGL, i když se osobní počítač vyvíjel do systému dostatečně výkonného pro provozování některých profesionálních grafických aplikací. Uživatelé mohli spustit Mayu , například nástupce Aliasu PowerAnimator na osobních počítačích SGI nebo Windows (a dnes na Linuxu, Mac OS X a Windows). Cenová konkurence nakonec zlomila dominanci SGI na trhu, ale zavedená základna softwarových inženýrů OpenGL a rozšiřující se uživatelská základna pro OpenGL v Apple, Linuxu a dalších operačních systémech vyústila na trh, kde jsou DirectX i OpenGL životaschopná a rozšířená API .

Dalším důvodem historické výhody OpenGL byl marketing a design. DirectX je sada rozhraní API, která nebyla uvedena na trh pro profesionální grafické aplikace. Ve skutečnosti nebyly ani navrženy pro taková použití. DirectX bylo API určené pro nízkoúrovňový a vysoce výkonný přístup k široce dostupnému grafickému hardwaru s nižší spotřebou a cenou pro spotřebitele za účelem vývoje her. OpenGL je mnohem obecnější 3D API, které se zaměřuje na celou řadu grafického hardwaru od low-end komoditních grafických karet až po profesionální a vědeckou vizualizaci grafiky mimo dosah průměrného spotřebitele a poskytuje funkce, které nejsou nutně exkluzivní pro specifický druh uživatele.

Herní vývojáři obvykle nevyžadovali tak široké API jako profesionální vývojáři grafických systémů. Mnoho her nepotřebuje překryvná letadla, šablony atd., I když to některým vývojářům her nezabránilo v jejich používání, pokud jsou k dispozici. Konkrétně herní designéry málokdy zajímá invariance pixelů požadovaná v určitých částech standardů OpenGL, které jsou naopak velmi užitečné pro filmové a počítačem podporované modelování.

SGI a Microsoft se kdysi pokusili sloučit OpenGL a DirectX. Grafika API Fahrenheit měla sdružovat jak high-end schopnosti OpenGL s širokou podporou nízkoúrovňové rozhraní DirectX. Microsoft nakonec od projektu ustoupil, protože nikdy nevyčlenil dostatečné prostředky na výrobu své části vykreslovacího motoru. Tento krok byl široce považován za záměr zajistit zablokování vývojářů platformě Windows-DirectX, což by bylo ztraceno, kdyby se rozhraní Fahrenheit API stalo de facto standardním grafickým API světa. Fahrenheit však vedl k mnoha vylepšením v DirectX a hlavní architekt Fahrenheita nyní pracuje v Microsoftu na DirectX.

Hraní

V prvních dnech 3D akcelerovaných her byly klíčovými měřítky výkon a spolehlivost a několik karet 3D akcelerátorů mezi sebou soupeřilo o nadvládu. Software byl napsán pro konkrétní značku grafické karty. V průběhu let se však OpenGL a Direct3D staly softwarovými vrstvami nad hardwarem, hlavně kvůli průmyslové podpoře grafické knihovny mezi hardwarem. Konkurence mezi těmito dvěma rostla, protože každý vývojář hry si vybral buď jedno, nebo druhé.

V počátcích 3D zrychleného hraní her většina prodejců nedodala úplný ovladač OpenGL. Důvod byl dvojí. Za prvé, většina akcelerátorů orientovaných na spotřebitele neimplementovala dostatek funkcí pro správnou akceleraci OpenGL. Za druhé, mnoho prodejců se snažilo implementovat plný ovladač OpenGL s dobrým výkonem a kompatibilitou. Místo toho napsali ovladače MiniGL , které implementovaly pouze podmnožinu OpenGL, dostačující ke spuštění GLQuake (a později dalších her OpenGL, většinou založených na enginu Quake). Správné ovladače OpenGL se s vývojem hardwaru staly stále běžnějšími a spotřebitelsky zaměřené akcelerátory dohnaly systémy SGI, pro které byl OpenGL původně navržen. To by bylo zhruba v době DirectX 6 nebo DirectX 7.

V konzolovém světě dominují proprietární nativní API, přičemž některé konzoly (např. PS3) poskytují kolem svého nativního API obal OpenGL. Původní Xbox podporoval Direct3D 8.1 jako své nativní API, zatímco Xbox 360 podporuje DirectX9 jako své nativní API. Většina vývojářů konzolí dává přednost použití nativních rozhraní API pro každou konzolu k maximalizaci výkonu, takže srovnání OpenGL a Direct3D je relevantní pro většinou platformy PC.

Mobilní telefony a další vestavěná zařízení

OpenGL pro integrované systémy, nazývané OpenGL ES , je podmnožinou grafického API OpenGL 3D určeného pro vestavěná zařízení . OpenGL ES podporují různé verze operačních systémů pro smartphony , například Android , iOS ( iPad , iPhone , iPod Touch ), Maemo ( Nokia N900 ) a Symbian .

OpenGL ES je k dispozici v 6 variantách, OpenGL ES 1.0, 1.1, 2.0, 3.0, 3.1, 3.2. Vydání 2.0 odstranilo zpětnou kompatibilitu se staršími variantami, kvůli rozsáhlým programovatelným funkcím potrubí, které jsou k dispozici v GL ES 2.0, oproti funkcím s pevným potrubím v GL ES 1.0 a 1.1. OpenGL ES 3.0 potřeboval přes OpenGL ES 2.0 nový hardware, zatímco OpenGL ES 3.1 je myšlen jako aktualizace softwaru, potřebuje pouze nové ovladače.

Direct3D Mobile , derivát Direct3D, je podporován Windows CE . V současné době všechna zařízení Windows Phone 7 používají uživatelské rozhraní .NET Framework zrychlené Direct3D Mobile 9 na integrovaných GPU Adreno 200/205 od Qualcomm.

Windows Phone 8 implementuje Direct3D 11 (omezeno na úroveň funkcí 9_3).

Reference

externí odkazy