close

DirectX

Přejít na navigaci Přejít na hledání
software DirectX
Logo
ŽánrRámec  (není  uveden )
Vývojářspolečnost Microsoft
Nejnovější verze12 Ultimate (10. listopadu 2020)
Operační systémMicrosoft Windows
JazykHigh Level Shader Language
LicenceEULA
( nesvobodná licence )
webová stránkaDomovská 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:

  1. 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 .
  2. 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 .
  3. 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“).
  4. 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 .
  5. DirectMusic : podporuje přehrávání hudby ( MIDI , ale ne MP3 ). V případě potřeby nabízí funkce softwarového syntezátoru .
  6. DirectShow : zvládá různé multimediální soubory (například filmy MPEG nebo audio MP3 ) a podporuje streamování přes internet .
  7. DirectSetup : umožňuje programátorovi detekovat nainstalované DirectX a aktualizovat jeho součásti během instalace jeho programu.
  8. 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

Image
Architektura DirectX 10

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

Externí odkazy