DirectX
| software DirectX | |
|---|---|
| Žánr | Rámec (není uveden ) |
| Vývojář | společnost Microsoft |
| Nejnovější verze | 12 Ultimate (10. listopadu 2020) |
| Operační systém | Microsoft Windows |
| Jazyk | High Level Shader Language |
| Licence | EULA ( nesvobodná licence ) |
| webová stránka | Domovská stránka DirectX |
DirectX (původně nazývané „Game SDK“) je sbírka rozhraní API pro zjednodušený vývoj her pro operační systém Microsoft Windows . Vývojová sada (SDK) je k dispozici zdarma na webu společnosti Microsoft . DirectX distribuovali sami tvůrci hry spolu s hrou, ale jsou obsaženy i přímo v operačním systému. Ve Windows XP je verze 9.0c knihoven, ve Windows Vista je možné nainstalovat verzi 11 se specifickými aktualizacemi, ve Windows 7 a 8 je již verze 11 zahrnuta, zatímco ve Windows 10 je již verze 12.
DirectX API
Různé součásti knihoven DirectX jsou programátorovi dostupné jako objekty odpovídající specifikaci COM .
Komponenty zahrnuté v DirectX 9.0c jsou:
- DirectX Graphics : umožňuje prezentaci 2D a 3D grafiky na obrazovce s přímým propojením s grafickou kartou .
Umožňuje programátorovi přímo využívat potenciál hardwaru počítače a obejít Windows Graphics Device Interface (GDI) a Display Device Interface (DDI) . Funkce, které nejsou podporovány hardwarem, jsou emulovány prostřednictvím softwaru DirectX díky Hardware Emulation Layer (HEL) .
Skládá se z nízkoúrovňového (Direct3D) a vysokoúrovňového (Direct3DX) API.- Direct3D: je určen pro složité grafické aplikace, které vyžadují vysokou obnovovací frekvenci obrazovky (jako jsou videohry ). Do verze 8.0 existovaly DirectDraw (2D grafika) a Direct3D (pouze 3D grafika), z nichž v posledních verzích je pouze API pro trojrozměrnou grafiku (která v případě potřeby vykresluje i ve 2D pomocí texturovaných polygonů bez perspektivy).
- Direct3DX: Založeno na Direct3D a nabízí podobné možnosti s menší složitostí.
- DirectX Raytracing: Raytracing v reálném čase pro DirectX 12, zkráceně DXR .
- DirectInput : spravuje vstup z klávesnice , myši , joysticku nebo jakéhokoli jiného herního periferního zařízení, obchází systém zpráv Windows a přímo přistupuje k hardwaru, ať už analogovému nebo digitálnímu . Podporuje efekty Force Feedback .
- DirectPlay : Poskytuje podporu pro síťové hry. Skládá se hlavně z protokolu na úrovni "aplikace" (viz model OSI ), který spravuje logické objekty, jako je herní sezení a hráči (rozlišení na vzdálené a místní).
Obecně je však použití DirectPlay spojeno se značným komunikačním přetížením, pro které se dočkalo vlažného přijetí mezi vývojáři, kteří se častěji uchýlili k ad-hoc síťovým implementacím přes socket (což umožňuje libovolnou kompatibilitu s herními servery na Linux , což je nemožné s DirectX propojeným s operačním systémem Microsoft). DirectPlay je stále součástí DirectX, ale již se nevyvíjí. (Tato funkce je v systému Windows 8.1 ve výchozím nastavení odstraněna, lze ji však znovu nainstalovat prostřednictvím „Programy a funkce“). - DirectSound : rozhraní se zvukovou kartou pro přehrávání a nahrávání zvukových efektů. Podporuje poziční zvuk (který simuluje prostorovost 3D zvuku).
Zvuky lze upravovat pomocí efektů z různých sekundárních zvukových vyrovnávací paměti , poté jsou smíchány dohromady v jediném primárním zvukovém vyrovnávací paměti . Vstupní buffery mohou být statické (ze souborů) nebo dynamické (streaming z mikrofonu apod.) a jejich množství závisí výhradně na výpočetním výkonu počítače. DirectSound se může spolehnout na funkčnost zvukové karty, pokud podporuje požadované efekty. Tři efekty jsou hlasitost, ekvalizace , panning , reverb , zkreslení , různé trojrozměrné efekty a simulace Dopplerova efektu . - DirectMusic : podporuje přehrávání hudby ( MIDI , ale ne MP3 ). V případě potřeby nabízí funkce softwarového syntezátoru .
- DirectShow : zvládá různé multimediální soubory (například filmy MPEG nebo audio MP3 ) a podporuje streamování přes internet .
- DirectSetup : umožňuje programátorovi detekovat nainstalované DirectX a aktualizovat jeho součásti během instalace jeho programu.
- DirectX Media Objects : umožňuje úpravu audio a video streamů tak, aby je bylo možné reprodukovat pomocí DirectShow nebo DirectSound.
Historie
DirectX, původně určený pro průmysl vývojářů her , se také široce používá v odvětvích jiných druhů softwaru. Například Direct3D je stále populárnější v oblasti strojírenství díky schopnosti rychle vykreslit vysoce kvalitní 3D grafiku pomocí nejnovějších 3D grafických karet .
V roce 1994 byl Microsoft na pokraji marketingu nového operačního systému - Windows 95 . Hlavním faktorem, který by určoval spokojenost uživatelů s tímto novým operačním systémem, by bylo, jaké programy by mohly běžet na počítačích, které jej používaly. Microsoft byl znepokojen, protože programátoři měli tendenci vidět předchozí operační systém Microsoftu, DOS , jako nejlepší platformu pro programování her, což znamenalo, že pro Windows 95 by bylo vyvinuto jen málo her a operační systém by nebyl příliš úspěšný.
DOS umožňoval přímý přístup ke grafickým kartám, klávesnicím a myším, zvukovým periferiím a všem ostatním částem operačního systému, zatímco Windows 95 se svým novým plug-and-play modelem omezoval přístup ke všem těmto zařízením tím, že pracoval na standardizovanějším Modelka. Microsoft potřeboval způsob, jak dát programátorům to, co chtěli, a nyní, protože operační systém byl jen několik měsíců od vydání. Microsoft začal vyvíjet grafické API interně od konce roku 1994 , ale po mnoha měsících se Microsoft rozhodl, že není dost času, aby mu umožnil sestavit API od nuly. V únoru 1995 se Microsoft rozhodl získat britské 3D Rendermorphics včetně jeho API laboratoře, 3D grafiky API Reality Lab, přepracováním API, které přijalo jméno DirectX.
První verze DirectX byla vydána v září 1995 pod názvem Windows Games SDK. Právě Win32 API by nahradilo nedostatečné a špatně zrozené API pro operační systém Win16 (DCI a WinG ). Vývoj DirectX sledoval tým Craig Eisler (vedoucí projektu), Alex St. John (technologický evangelista) a Eric Engstrom (programový manažer). Jednoduše řečeno, umožnila všem verzím Microsoft Windows, počínaje Windows 95, začlenit vysoce kvalitní multimédia.
Než existovalo DirectX, Microsoft již zahrnul OpenGL na svou platformu Windows NT . V té době OpenGL vyžadovalo špičkový hardware a bylo omezeno na inženýrské a CAD použití . Direct3D mělo být malým pomocníkem pro herně orientované OpenGL. Jak rostla síla grafických karet a počítačů, na kterých běží, OpenGL se stalo mainstreamem. V tomto bodě začala „bitva“ mezi fanoušky OpenGL (cross-platform) a Direct3D (pouze Windows), což mnozí označovali jako další příklad taktiky Microsoftu. Ostatní rozhraní API DirectX jsou však v mnoha videohrách často kombinována s OpenGL, protože OpenGL nezahrnuje všechny funkce DirectX (jako je podpora zvuku nebo joysticku). Mnoho pokusů v tomto směru selhalo.
DirectX byl použit jako základ pro rozhraní API konzoly Xbox společnosti Microsoft . API bylo vyvinuto ve spolupráci společností Microsoft a nVidia , která vyvinula hardware používaný v konzoli. Rozhraní Xbox API je podobné DirectX verze 8.1, ale na rozdíl od jiných konzolových technologií jej nelze upgradovat.
V roce 2002 , Microsoft vydal DirectX 9 s podporou pro použití s komplikovanějšími programy než dříve, s pixelem a vertex shader verze 2.0. Microsoft pokračoval v aktualizaci DirectX přidáním funkcí shader model 3.0 v DirectX 9.0c v srpnu 2004 .
S verzí 8 byly představeny obaly pro .Net framework , takže můžete vyvíjet přímo s touto platformou.
| Verze DirectX | Číslo verze | Operační systém | Datum distribuce |
|---|---|---|---|
| DirectX 1.0 | 4.02.0095 | 30. září 1995 | |
| DirectX 2.0 | ? | Odesláno pouze s některými aplikacemi 3D party | 1996 |
| DirectX 2.0a | 4.03.00.1096 | Windows 95 OSR2 a Windows NT 4.0 | 5. června 1996 |
| DirectX 3.0 | 4.04.00.0068 | 15. září 1996 | |
| 4.04.00.0069 | Novější verze DirectX 3.0 zahrnovala Direct3D 4.04.00.0069 | 1996 | |
| DirectX 3.0a | 4.04.00.0070 | Windows NT 4.0 Service Pack 3 (a novější) Nejnovější podporovaná verze DirectX pro Windows NT 4.0 |
prosince 1996 |
| DirectX 3.0b | 4.04.00.0070 | Jednalo se o menší aktualizaci na 3.0a, která opravila kosmetický problém s japonskou verzí Windows 95 | prosince 1996 |
| DirectX 4.0 | Nikdy nedistribuováno | ||
| DirectX 5.0 | 4.05.00.0155 (RC55) | Dostupné jako beta pro Windows NT 5.0, ale také instalovatelné na Windows NT 4.0 | 16. července 1997 |
| DirectX 5.2 | 4.05.01.1600 (RC00) | DirectX verze 5.2 pro Windows 95 | 5. května 1998 |
| 4.05.01.1998 (RC0) | DirectX verze 5.2 pro Windows 98 | 5. května 1998 | |
| DirectX 6.0 | 4.06.00.0318 (RC3) | Windows CE jako implementace na Dreamcast | 7. srpna 1998 |
| DirectX 6.1 | 4.06.02.0436 (RC0) | 3. února 1999 | |
| DirectX 6.1a | 4.06.03.0518 (RC0) | Exkluzivně pro Windows 98 SE | 5. května 1999 |
| DirectX 7.0 | 4.07.00.0700 (RC1) | 22. září 1999 | |
| 4.07.00.0700 | Windows 2000 | 17. února 2000 | |
| DirectX 7.0a | 4.07.00.0716 (RC0) | 8. března 2000 | |
| 4.07.00.0716 (RC1) | 2000 | ||
| DirectX 7.1 | 4.07.01.3000 | Exkluzivně pro Windows Me | 14. září 1999 |
| DirectX 8.0 | 4.08.00.0400 (RC10) | 12. listopadu 2000 | |
| DirectX 8.0a | 4.08.00.0400 (RC14) | Nejnovější verze podporovaná pro Windows 95 | 5. února 2001 |
| DirectX 8.1 | 4.08.01.0810 | Exkluzivně pro Windows XP , Windows Server 2003 a Xbox | 25. října 2001 |
| 4.08.01.0881 (RC7) | Verze pro předchozí operační systémy (Windows 98, Windows Me a Windows 2000) |
8. listopadu 2001 | |
| DirectX 8.1a | 4.08.01.0901 (RC?) | Toto vydání obsahuje aktualizaci pro Direct3D (D3d8.dll) | 2002 |
| DirectX 8.1b | 4.08.01.0901 (RC7) | Tato aktualizace obsahuje opravu DirectShow v systému Windows 2000 (Quartz.dll) | 25. června 2002 |
| DirectX 8.2 | 4.08.02.0134 (RC0) | Stejně jako DirectX 8.1b s přidáním DirectPlay 8.2 | 2002 |
| DirectX 9.0 | 4.09.00.0900 (RC4) | 19. prosince 2002 | |
| DirectX 9.0a | 4.09.00.0901 (RC6) | 26. března 2003 | |
| DirectX 9.0b | 4.09.0000.0902 (RC2) | 13. srpna 2003 | |
| DirectX 9.0c | 4.09.00.0903 | Exkluzivně pro Windows XP Service Pack 2 | |
| 4.09.00.0904 (RC0) | 4. srpna 2004 | ||
| 4.09.00.0904 | Windows XP Service Pack 2, Windows Server 2003 Service Pack 1, Windows Server 2003 R2 a Xbox 360 (upravená verze) | 6. srpna 2004 | |
| DirectX 9.0c – pravidelné aktualizace | 4.09.00.0904 (RC0) | To z 13. prosince 2004 je nejnovější 32bitová verze, která stačí pouze pro Windows Me a Windows 2000 32bitové. | Dvouměsíční aktualizace od října 2004 do srpna 2007 a následně čtvrtletně; Nejnovější verze: listopad 2010 |
| DirectX 10 | 6.00.6000.16386 | Exkluzivně pro Windows Vista | 30. listopadu 2006 |
| 6.00.6000.00000 | Edice upravená pro Windows XP od KM-Software | 4. prosince 2007 | |
| 6.00.6001.18000 | Windows Vista SP1 , Windows Server 2008 obsahuje Direct3D 10.1 , který zavádí modely shaderů 4.1 |
4. února 2008 | |
| DirectX 11 | 6.01.7600.16385 | Windows Vista SP2 a Server 2008 SP2 , prostřednictvím aktualizace platformy pro Windows Vista a další aktualizace z Windows Update, 7 a Server 2008 R2 | 27. října 2009 |
| DirectX 11.1 | 6.02.9200.16384 | Windows 8 , Phone 8 , Windows Server 2012 | 26. října 2012 |
| DirectX 11.2 | 6.03.9600.16384 | Windows 8 , RT , Windows Server 2012 R2 | |
| DirectX 12 | 10.00.10240 | Windows 10 , Windows 10 Mobile , Windows Server 2016 | 29. července 2015 |
Kompatibilita
Výrobci hardwaru musí napsat ovladače pro každou součást a otestovat je, aby byly kompatibilní s DirectX. Mnoho moderních hardwarových periferií má ovladače kompatibilní pouze s DirectX (jinými slovy, před použitím tohoto hardwaru je nutné nainstalovat DirectX). Dřívější verze DirectX obsahovaly aktualizovanou knihovnu všech kompatibilních ovladačů dostupných do té doby. Toto chování bylo ukončeno ve prospěch automatické aktualizace prováděné pomocí služby Windows Update , která uživatelům umožňuje stahovat pouze ovladače související s jejich hardwarem, nikoli celou knihovnu.
Některé ovladače podporují pouze jednu verzi DirectX. DirectX je ale zpětně kompatibilní , což znamená, že novější verze podporují starší. Pokud máte například v systému nainstalované rozhraní DirectX 9 a spouštíte hru napsanou pro rozhraní DirectX 6, mělo by to stále fungovat. Hra bude používat to, co je známé jako „rozhraní DirectX 6. Každá nová verze DirectX musí podporovat jakoukoli předchozí verzi.
Změny v DirectX10
DirectX10 má nové rychlejší knihovny DLL díky opuštění zpětné kompatibility s předchozími verzemi. Toto tedy nespravuje DirectX 10, ale DirectX 9.0L, které jsou paralelní s operačním systémem Windows Vista. Podpora pro Shader Model 4.0 a unifikované Geometry Shadery nebo shadery . Sjednocené shadery vám umožňují používat kteroukoli z jednotek shaderu dostupných na grafické kartě, lhostejně pro výpočet pixelů, vrcholů, geometrií atd. tímto způsobem je možné kdykoliv využít veškerý výpočetní výkon grafické karty. DirectX 10 díky novému jádru Windows Vista umožňuje vykreslovat složitější scény s menšími zásahy CPU, správou vyvážení zátěže mezi CPU a GPU s optimalizovanými přenosy. Režie objektu je drasticky snížena, tj. dodatečný výpočetní čas k vytvoření objektů, díky skutečnosti, že u DX10 probíhá vytváření přímo na GPU, aniž by bylo nutné nejprve projít CPU pro každý objekt (zatímco u DX9 již začíná od 500 objektů, úzké hrdlo mezi API a CPU se projevilo a výkon prudce klesl).
DirectX10 provedlo několik velkých změn, které revolučně změnily způsob psaní aplikací v reálném čase, a nyní se na některé z nich podíváme.
Kompletní odstranění pevného potrubí
V DirectX10 je jiná filozofie při používání Device. Nyní to není považováno za úplné řídicí centrum aplikace, ale její úkoly jsou odlehčeny umístěním na úroveň zdrojů, cokoliv je potřeba (textura, vyrovnávací paměť vertexu nebo jiné) musí a může být vytvořeno pouze prostřednictvím zařízení. Takže již nebudou existovat typické funkce, které by se při vykreslování chovaly přes zařízení, jak můžeme vidět na tomto příkladu D3D9.
Předpokládejme, že zařízení je platný a funkční ukazatel na třídu IDirect3DDevice9
zařízení-> SetTexture (ExampleTexture); // Zadejte texturu pro další render device-> SetRenderState (D3DRS_LIGHTENABLE, false) // Vypnout světla
Na tomto malém příkladu je možné si uvědomit, že vše, co je potřeba pro renderování zadat, se děje přes Zařízení. Toto se nazývá pevné potrubí. V D3D10 je toto zrušeno a nahrazuje se Shaders : proto musí být každá aplikace D3D10 doprovázena alespoň jedním shaderem, jinak nebude možné nic vykreslit.
Tato revoluce přinese značné potíže těm, kteří se chtějí přiblížit světu 3D prostřednictvím Direct3D10, protože pochopení mechanismu vykreslování bude obtížnější.
Změny v D3DX
D3DX, slavná knihovna zrozená s DirectX8 pro usnadnění práce programátorům, byla upravena.
Za prvé, mnoho funkcí a tříd na shaderech (D3DXCompileShaderFromFile, D3DXAssembleShaderFromFile) bylo předáno z D3DX do D3D. To znamená, že přešli z pomocné do hlavní knihovny. To ještě více podtrhuje skutečnost, že shader se v Direct3D10 stává zásadním. Zcela byly odstraněny různé třídy pro správu animací (ID3DXAllocateHiearchy, D3DXMeshContainer, D3DXFrame), což znamená nový animační systém. Programátoři, kteří dlouho kritizovali animační systém Direct3D9, možná až příliš ošklivý na správu, z toho budou mít velkou radost.
Automatické ztracené zařízení
Direct3D10 je automaticky schopen spravovat ztracená zařízení , tedy takové podmínky, ve kterých dojde ke ztrátě vykreslování scény, například když je minimalizováno okno obsahující aplikaci D3D10. S Direct3D9 v té době bylo nutné zastavit vykreslování, protože nikdo neviděl výsledek kreslení. Také spravuje obnovu zařízení při přechodu ze stavu zastavení do výkresu (z minimalizovaného na maximalizovaný). Dříve bylo nutné v každém snímku tímto způsobem kontrolovat stav zařízení a v případě potřeby jej resetovat
if (FAILED (zařízení-> TestCooperativeLevel ())
zařízení-> Resetovat (& d3dpp);
Kde d3dpp je struktura, která obsahuje různá nastavení zařízení (velikost backbufferu, okno, do kterého se má kreslit atd.).
Dále byla funkce TestCooperativeLevel nahrazena funkcí CheckDeviceState , která vrací mnohem více informací než ta předchozí.
Geometry Shaders
V novém Shader Model 4.0 jsou geometry shadery, které nejsou pro hru zásadní, ale budou extrémně užitečné. Ty lze považovat za rozšíření vertex shaderu. Vertex shader, jak název napovídá, dokáže zpracovat pouze jeden vertex najednou, zatímco geometry shadery budou schopny zpracovat celé geometrie.
Pro každý vrchol vrací vertex shader 1 vertex, proto nemůže číst data ze sousedních vertexů (to brání různým technikám: například návrat z čteného vrcholu do trojúhelníku, ke kterému patří): vertex shader ve skutečnosti obdrží float4, který indikuje jeho počáteční pozici, a vrátí další, který indikuje jeho novou pozici (která může také zůstat nezměněna). Shader geometrie místo toho přijme jako vstup 1 vrchol nebo trojúhelník nebo až 6 trojúhelníků, ale vrátí 1 nebo více primitiv.
To znamená, že z jednoduchého trojúhelníku na vstupu je možné vytvořit i 1000 trojúhelníků, aniž byste je museli kreslit jako obvykle (tj. vytvořit vertex buffer nebo index buffer). Je tedy možné plynule měnit počet trojúhelníků, které mají být vykresleny, v závislosti na vzdálenosti, čímž se potlačí funkce D3DX ohledně počtu vrcholů, které mají být vykresleny v dané síti.
Geometry shader umožňuje psát hardwarový kód, který vytváří trojúhelníky ze vzduchu. To se může zdát zbytečné, ale podívejme se na malý praktický příklad.
Obvykle, abyste nakreslili moře realistickým způsobem, musíte vytvořit obrovskou mřížku bodů a nechat je oscilovat. To zabírá hodně paměti.
Ale pokud je kamera ve značné vzdálenosti od moře, je zbytečné ji dělat příliš detailní, protože vzdálenost vám brání vidět jemné detaily. Bylo by proto užitečné přiměřit detaily ke vzdálenosti moře.
Pomocí geometrie shaderů bude možné vypočítat počet polygonů ze vzdálenosti, dokonce je snížit na 2! A pak, jak se přiblížíte, budete moci zvýšit počet těch druhých, což bude mít zároveň realistický efekt, který bude spotřebovávat zdroje úměrně potřebám.
Další aplikace geometry shaderů budou ve stínech šablony, které grafický engine Doom3 spravoval přes CPU , takže hra bude velmi těžká.
Dalším nástrojem, na kterém Microsoft pracuje, je XNA , framework , který pomáhá vývoji her integrací DirectX, high-level language shaderů ( HLSL ) a dalších na více platformách. To značně usnadní převod mezi jedním systémem XNA a dalším, takže přenos z Xboxu na PC (a naopak) bude mnohem jednodušší.
DirectX 11
Verze 11 DirectX byla oznámena v Seattlu během GameFest 08. Původně byla zaměřena na Windows 7, poté byla přenesena také na Vista. Je to nadmnožina DirectX 10, to znamená, že udržuje všechna jeho API a přidává nové funkce pouze podle potřeby. Zejména u této verze knihoven se objevuje hardwarová teselace , která výrazně zlepšuje realismus 3D scén v reálném čase. Dalšími důležitými inovacemi jsou podpora GPGPU s DirectCompute API a přijetí Shader Model 5; podpora pro multithreading byla také výrazně vylepšena. Funkce DX11 (kromě Shader Model 5) mohou být podporovány také hardwarem kompatibilním s DX9 nebo DX10.
DirectX 12
Verze 12 DirectX byla oznámena společností Microsoft na Game Developer Conference dne 20. března 2014. Je zaměřena výhradně na Windows 10 a není kompatibilní s předchozími operačními systémy, její zdaleka nejdůležitější funkcí je nízkoúrovňové API, podobné tomu, které již bylo vyvinuto od AMD s Mantle , Apple s Metal a od Khronos Group s Vulkanem . Nové API, stejně jako u jeho konkurentů, je mnohem štíhlejší a rychlejší, což umožňuje vyšší rychlosti vykreslování. Naopak vývojář se musí postarat o veškerou správu paměti. Dalšími důležitými inovacemi DX12 jsou: zavedení oficiální podpory multi-GPU režimu, která byla dříve ponechána na implementaci výrobců grafických karet. A zavedení ray tracingu pro grafické karty řady Nvidia GeForce 20 . [1]
Poznámky
Související položky
Další projekty
Wikibooks obsahuje texty nebo návody na DirectX
Wikimedia Commons obsahuje obrázky nebo jiné soubory na DirectX
Externí odkazy
- ( EN ) Oficiální stránka DirectX na Microsoftu – (Stránka ke stažení D3D SDK)
- ( EN ) Vývoj DirectX World-Engine3D pro videohry , na directxworld.altervista.org . Získáno 28. srpna 2018 (z originálu archivováno 5. února 2017) .
- ( EN ) Obecný web o vývoji her na gamedev.net .
- Analýza DirectX 10: Co přináší budoucnost? , na tomshw.it . Získáno 16. července 2007 (z originálu archivováno 27. září 2007) .
- První pohled na DirectX 11.1 na bitsandchips.it .