DirectX

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
DirectX
software
Siglă
Tip Cadrul (nu este listat )
Dezvoltator Microsoft Corporation
Ultima versiune 12 (19 mai 2019)
Sistem de operare Microsoft Windows
Licență EULA
( licența nu este gratuită )
Site-ul web Pagina principală DirectX

DirectX (numit initial „Joc SDK“) este o colecție de API - uri pentru simplificate joc de dezvoltare pentru Microsoft Windows sistem de operare. Kit - ul de dezvoltare (SDK) este disponibil gratuit pe Microsoft site - ul web. DirectX a fost distribuit chiar de către producătorii de jocuri împreună cu jocul, dar sunt, de asemenea, incluse direct în sistemul de operare. În Windows XP există o versiune 9.0c a bibliotecilor, în Windows Vista că este posibil să se instaleze versiunea 11 cu actualizări specifice, în Windows 7 și 8 versiunea 11 este deja inclusă, în timp ce în Windows 10 există deja versiunea 12.

API DirectX

Diferitele componente ale bibliotecilor DirectX sunt disponibile la programator ca obiecte ce corespund COM caietul de sarcini.

Componentele incluse în DirectX 9.0c sunt:

  1. DirectX Graphics: permite prezentarea grafica 2D și 3D pe ecran, interfațare direct cu placa video .
    Acesta permite programatorului să exploateze în mod direct potențialul hardware PC, ocolind Windows dispozitiv Graphics Interface (GDI) și display Interface Device (DDI) . Funcțiile care nu sunt acceptate de hardware sunt emulat prin intermediul software - ului de DirectX datorită stratului de hardware Emulation (HEL) .
    Se compune dintr-un API de nivel scăzut (Direct3D) și un nivel înalt (Direct3DX).
    • Direct3D: este proiectat pentru aplicații grafice complexe , care necesită o rată de reîmprospătare ridicată de ecran (cum ar fi jocurile video ). Până la versiunea 8.0 existau DirectDraw (grafică 2D) și Direct3D (numai grafică 3D), dintre care în cele mai recente versiuni există doar API-ul pentru grafica tridimensională (care, dacă este necesar, este redat și în 2D folosind poligoane texturate fără perspectivă).
    • Direct3DX: se bazează pe Direct3D pentru a oferi capacități similare , cu mai puțin de complexitate.
    • DirectX raytracing: în timp real ray tracing pentru DirectX 12, prescurtată DXR.
  2. DirectInput: gestionează date de intrare tastatura , mouse - ul , joystick - ul sau orice alt joc periferice, ocolind pentru Windows sistemul de mesaje și să aibă acces direct hardware - ul, fie că este vorba analogic sau digital , . Suportă force feedback efecte.
  3. DirectPlay: Oferă suport pentru jocuri în rețea. Se compune în principal dintr - un „cerere“ la nivel de protocol (vezi modelul OSI ) , care gestionează obiecte logice , cum ar fi sesiune de joc și jucătorii (diferențiate în distanță și locale).
    În general, cu toate acestea, utilizarea DirectPlay este conectat la o supraîncărcare de comunicare considerabilă, pentru care a primit o primire călduță între dezvoltatori, care au apelat mai des la ad-hoc implementări de rețea prin intermediul socket (care permite orice compatibilitatea cu joc servere pe Linux , ceea ce este imposibil cu DirectX legat de sistemul de operare Microsoft). DirectPlay este încă inclus în DirectX, dar nu mai este dezvoltat. (Această caracteristică este eliminată implicit în Windows 8.1, dar poate fi reinstalată prin „Programe și caracteristici”).
  4. DirectSound: interfețe cu placa de sunet pentru a reda și înregistra efecte de sunet. Suportă sunet pozițional (care simulează spațialitatea sunetului 3D).
    Sunetele pot fi modificate de efecte din diferite tampon de intrare (secundar Sound Tampoane), apoi se amestecă împreună în tamponul o ieșire (Primary Sound tampon). Tampoanele de intrare pot fi statice (din fișiere) sau dinamice (streaming de la un microfon etc.), iar cantitatea lor depinde exclusiv de puterea de calcul a computerului. DirectSound se poate baza pe funcționalitatea plăcii de sunet, în cazul în care acceptă efectele necesare. Trei efecte sunt de volum, egalizare , panning, reverb , distorsiune , diferite efecte tridimensionale și simularea efectului Doppler .
  5. DirectMusic: acceptă redarea de muzică ( MIDI , dar nu și MP3 ). Oferă funcționalitatea unui software de sintetizator , atunci când este necesar.
  6. DirectShow: pixuri diferite fișiere multimedia (de exemplu , MPEG filme sau MP3 audio) și acceptă transmiterea în flux prin intermediul internetului .
  7. DirectSetup: Permite programator pentru detectarea instalat DirectX și să actualizeze componentele sale în timpul instalării programului său.
  8. Obiecte DirectX Media: permite modificarea fluxurilor audio și video, astfel încât acestea să poată fi reproduse prin DirectShow sau DirectSound.

Istorie

Inițial destinat pentru jocuri video industria dezvoltator, DirectX a devenit , de asemenea , utilizat pe scară largă în industriile de alte tipuri de software. De exemplu, Direct3D este din ce în ce mai populare în inginerie domeniu, datorită capacității de a face rapid de înaltă calitate grafică 3D folosind cele mai noi 3D placilor video .

În 1994 , Microsoft a fost pe punctul de introducere pe piață a noului sistem de operare - Windows 95 . Principalul factor care ar determina satisfacția utilizatorului cu acest nou sistem de operare ar fi ce programe ar putea rula pe mașinile care l-au folosit. Microsoft a fost în cauză, pentru că programatorii au avut tendința de a vedea sistemul de operare anterior Microsoft, DOS , ca cea mai bună platformă pentru jocuri de programare, ceea ce însemna că puține jocuri vor fi dezvoltate pentru Windows 95 și sistemul de operare nu ar fi foarte de succes.

DOS permis accesul direct la placi video, tastaturi și mouse - uri, periferice audio și toate celelalte părți ale sistemului de operare, în timp ce Windows 95, cu noul său model de plug-and-play , accesul limitat la toate aceste dispozitive de lucru pe o mai standardizate model. Microsoft avea nevoie de o modalitate de a oferi programatorilor ceea ce doreau și acum, deoarece sistemul de operare era la doar câteva luni distanță de lansare. Microsoft a început să dezvolte un API grafica in-house spre sfârșitul anului 1994 , dar după mai multe luni de Microsoft a decis că nu a fost suficient timp pentru a permite să construiască API - ul de la zero. În februarie 1995 de , Microsoft a luat decizia de a achiziționa britanice Rendermorphics 3D , inclusiv laboratorul său API - ul, grafica 3D API Reality Lab, prin redeveloping API - ul care a luat numele de DirectX.

Prima versiune de DirectX a fost lansat în septembrie 1995 de sub numele de Windows Games SDK. Acesta a fost Win32 API care ar înlocui API insuficiente și prost născut pentru Win16 sistemul de operare (DCI și aripa ). Dezvoltarea DirectX a fost urmată de echipa de Craig Eisler (lider de proiect), Alex St. John (tehnologie Evanghelistul), și Eric Engstrom (manager de program). Pur și simplu, a permis tuturor versiunilor Microsoft Windows, începând cu Windows 95, să încorporeze multimedia de înaltă calitate.

Înainte de DirectX a existat, Microsoft a inclus deja OpenGL pe al Windows NT platforma. La acea vreme, OpenGL hardware - ului necesar high-end și a fost limitat la inginerie și utilizarea CAD . Direct3D ar fi trebuit să fie un mic ajutor pentru OpenGL orientat spre joc. Deoarece puterea de plăci video și computerele pe care ruleaza crescut, OpenGL a devenit mainstream. În acest moment o „luptă“ a început între fanii de OpenGL (cross-platform) și Direct3D (numai pentru Windows), pe care mulți se face referire ca un alt exemplu de tactica Microsoft. Cu toate acestea, celelalte API - uri DirectX sunt adesea combinate cu OpenGL în mai multe jocuri video , deoarece OpenGL nu include toate caracteristicile DirectX (cum ar fi suport pentru sunet sau joystick - ul). Multe încercări în această direcție au eșuat.

DirectX a fost folosit ca bază pentru Microsoft Xbox consola API. API - ul a fost dezvoltat în colaborare între Microsoft și nVidia , care a dezvoltat hardware - ul utilizat în consolă. API-ul Xbox este similar cu DirectX versiunea 8.1, dar nu poate fi actualizat spre deosebire de alte tehnologii de consolă.

În 2002 , Microsoft a lansat DirectX 9 cu suport pentru utilizarea cu programe mai complicate decât înainte, cu pixel si vertex shader versiunea 2.0. Microsoft a continuat să actualizeze DirectX prin adaugarea modelului shader 3.0 funcții în DirectX 9.0c în luna august 2004 de .

Cu versiunea 8, ambalaje pentru Net Framework au fost introduse , astfel încât să puteți dezvolta în mod direct cu această platformă.

Versiunea DirectX Versiunea numarul Sistem de operare Data distribuției
DirectX 1.0 4.02.0095 30 septembrie 1995
DirectX 2.0 ? Trimis numai cu unele aplicații 3D pentru petreceri 1996
DirectX 2.0a 4.03.00.1096 Windows 95 OSR2 și Windows NT 4.0 5 iunie 1996
DirectX 3.0 4.04.00.0068 15 septembrie 1996
4.04.00.0069 Versiunea ulterioară a DirectX 3.0 a inclus Direct3D 4.04.00.0069 1996
DirectX 3.0a 4.04.00.0070 Windows NT 4.0 Service Pack 3 (și mai târziu)
Cea mai recentă versiune acceptată DirectX pentru Windows NT 4.0
Decembrie 1996
DirectX 3.0b 4.04.00.0070 A fost o modificare minoră a 3.0a , care a stabilit o problemă cosmetice cu versiunea japoneză a Windows 95 Decembrie 1996
DirectX 4.0 Niciodată distribuit
DirectX 5.0 4.05.00.0155 (RC55) Disponibil ca beta pentru Windows NT 5.0, dar și instalabil pe Windows NT 4.0 Luna iulie de 16, 1997 de
DirectX 5.2 4.05.01.1600 (RC00) DirectX versiunea 5.2 pentru Windows 95 5 mai 1998
4.05.01.1998 (RC0) DirectX versiunea 5.2 pentru Windows 98 5 mai 1998
DirectX 6.0 4.06.00.0318 (RC3) Windows CE ca o punere în aplicare pe Dreamcast 7 august 1998
DirectX 6.1 4.06.02.0436 (RC0) 3 februarie 1999
DirectX 6.1a 4.06.03.0518 (RC0) Windows 98 SE exclusivă 5 mai 1999
DirectX 7.0 4.07.00.0700 (RC1) 22 septembrie 1999
4.07.00.0700 Windows 2000 17 februarie 2000
DirectX 7.0a 4.07.00.0716 (RC0) 8 martie 2000
4.07.00.0716 (RC1) 2000
DirectX 7.1 4.07.01.3000 Windows Me exclusiv Luna septembrie pe 14, anul 1999
DirectX 8.0 4.08.00.0400 (RC10) 12 noiembrie 2000
DirectX 8.0a 4.08.00.0400 (RC14) Cea mai recentă versiune acceptată pentru Windows 95 5 februarie 2001
DirectX 8.1 4.08.01.0810 Windows XP , Windows Server 2003 și Xbox exclusivă 25 octombrie 2001
4.08.01.0881 (RC7) Versiune pentru sisteme de operare mai vechi
(Windows 98, Windows Me și Windows 2000)
8 luna noiembrie, 2001 de
DirectX 8.1a 4.08.01.0901 (RC?) Această versiune include o actualizare pentru Direct3D (D3d8.dll) 2002
DirectX 8.1b 4.08.01.0901 (RC7) Această actualizare include un fix pentru DirectShow pe Windows 2000 (Quartz.dll) 25 iunie 2002
DirectX 8.2 4.08.02.0134 (RC0) La fel ca DirectX 8.1b cu adăugarea DirectPlay 8.2 2002
DirectX 9.0 4.09.00.0900 (RC4) 19 decembrie 2002
DirectX 9.0a 4.09.00.0901 (RC6) Martie Aprilie de 26, 2003 de
DirectX 9.0b 4.09.0000.0902 (RC2) Luna august 13, 2003 de
DirectX 9.0c 4.09.00.0903 Windows XP Service Pack 2 exclusiv
4.09.00.0904 (RC0) 4 august 2004
4.09.00.0904 Windows XP Service Pack 2, Windows Server 2003 Service Pack 1, Windows Server 2003 R2, și Xbox 360 (versiune modificată) 6 august 2004
DirectX 9.0c - actualizări periodice 4.09.00.0904 (RC0) Aceasta din 13 decembrie 2004 este cea mai recentă versiune pe 32 de biți numai suficient pentru Windows Me și Windows 2000 pe 32 de biți. Actualizări bilunare din octombrie 2004 până în august 2007 și ulterior trimestrial; Cea mai recentă versiune: Noiembrie anul 2010
DirectX 10 6.00.6000.16386 Windows Vista exclusivă 30 noiembrie 2006
6.00.6000.00000 Ediția modificate pentru Windows XP prin KM-Software 4 decembrie 2007
6.00.6001.18000 Windows Vista SP1 , Windows Server 2008
include Direct3D 10.1 care introduce 4.1 modelele Shader
4 februarie 2008
DirectX 11 6.01.7600.16385 Windows Vista SP2 si Server 2008 SP2 , prin actualizarea platforma pentru Windows Vista și o actualizare suplimentară de la Windows Update, 7 și Server 2008 R2 27 octombrie 2009
DirectX 11.1 6.02.9200.16384 Windows 8 , Phone 8 , Windows Server 2012 26 octombrie 2012
DirectX 11.2 6.03.9600.16384 Windows 8 , RT , Windows Server 2012 R2
DirectX 12 10.00.10240 Ferestre 10 , Ferestre 10 Mobile , Windows Server 2016 29 iulie 2015

Compatibilitate

Hardware producătorii trebuie să scrie drivere pentru fiecare componentă și să le testați pentru a le face compatibile DirectX. Multe periferice hardware moderne au drivere compatibile numai DirectX (cu alte cuvinte, trebuie să instalați DirectX înainte de a putea utiliza acel hardware). Primele versiuni ale DirectX au inclus o bibliotecă actualizată cu toate driverele compatibile disponibile până în acel moment. Acest comportament a fost întrerupt în favoarea actualizarea automată face cu Windows Update , care permite utilizatorilor să descarce numai driverele legate de hardware - ul lor, mai degrabă decât întreaga bibliotecă.

Unele drivere acceptă o singură versiune de DirectX. Dar DirectX este compatibil (compatibil cu trecutul), ceea ce înseamnă că noi versiuni suportă mai vechi. De exemplu, dacă aveți DirectX 9 instalat pe un sistem și rulați un joc scris pentru DirectX 6, acesta ar trebui să funcționeze în continuare. Jocul va folosi ceea ce este cunoscut sub numele de „interfața” DirectX 6. Orice nouă versiune a DirectX trebuie să accepte orice versiune anterioară.

Modificări în DirectX10

Arhitectura DirectX 10

DirectX10 are noi DLL-uri mai rapide datorită abandonării compatibilității cu versiunile anterioare. Prin urmare, acest lucru nu este gestionat de DirectX 10, ci de DirectX 9.0L care sunt paralele cu sistemul de operare Windows Vista. Suport pentru Shader Model 4.0 și unificat geometrie Shaders sau shadere. Shader unificate vă permit să utilizați oricare dintre unitățile shader disponibile pe placa grafică, indiferent pentru calculul de pixeli, noduri, geometrii, etc. în acest fel este posibil să se exploateze toată puterea de calcul a plăcii grafice în orice moment. DirectX 10, datorită noului kernel Windows Vista, vă permite să redați scene mai complexe cu mai puțină intervenție a procesorului, gestionând echilibrul de încărcare între CPU și GPU, cu optimizarea transferurilor. Overhead- ul obiectului este redus drastic, adică timpul de calcul suplimentar pentru crearea obiectelor, datorită faptului că, cu DX10, creația are loc direct pe GPU, fără a trece mai întâi prin CPU pentru fiecare obiect (în timp ce DX9 începe deja din 500 de obiecte, blocajul dintre API și CPU a devenit vizibil și performanța a scăzut brusc).

DirectX10 a făcut câteva schimbări mari care revoluționează modul în care scrieți aplicații RealTime, iar acum vom analiza unele dintre ele.

Eliminarea completă a conductei fixe

În DirectX10 există o filozofie diferită în utilizarea dispozitivului. Acum nu este văzut ca centrul de control total al unei aplicații, dar sarcinile sale sunt ușurate prin plasarea acesteia la un nivel de resursă, orice este necesar (o textură, un tampon de vârf sau altul) trebuie și poate fi creat numai prin intermediul dispozitivului. Deci, nu vor mai exista funcții tipice care să acționeze prin dispozitiv pe randare, așa cum putem vedea în acest exemplu de D3D9.

Să presupunem că dispozitivul este un indicator valid și funcțional pentru clasa IDirect3DDevice9

 device-> SetTexture (ExampleTexture); // Introduceți textura pentru următorul randare
  dispozitiv-> SetRenderState (D3DRS_LIGHTENABLE, false) // Opriți luminile

În acest mic exemplu este posibil să ne dăm seama că tot ce trebuie introdus pentru redare se face prin dispozitiv. Aceasta se numește conductă fixă. În acest D3D10 este abolită, înlocuindu - l cu Shader : D3D10 atunci fiecare cerere trebuie să fie însoțită de cel puțin o Shader, în caz contrar nu va fi posibil să se facă nimic.

Această revoluție va aduce dificultăți semnificative celor care doresc să abordeze lumea 3D prin Direct3D10, deoarece înțelegerea mecanismului de redare va fi mai dificilă.

Modificări în D3DX

D3DX, celebrul lib născut cu DirectX8 pentru a facilita sarcina programatorilor, a fost modificat.

În primul rând, multe funcții și clase pe shadere (D3DXCompileShaderFromFile, D3DXAssembleShaderFromFile) au fost trecute de la D3DX la D3D. Aceasta înseamnă că au trecut de la auxiliar la biblioteca principală. Acest lucru subliniază și mai mult faptul că nuanța devine fundamentală în Direct3D10. Diverse clase pentru gestionarea animațiilor au fost complet eliminate (ID3DXAllocateHiearchy, D3DXMeshContainer, D3DXFrame), aceasta înseamnă un nou sistem de animație. Dintre acestea, programatorii care au criticat mult timp sistemul de animație al Direct3D9, poate puțin prea urât pentru a-l gestiona, se vor bucura foarte mult.

Dispozitiv automat pierdut

Direct3D10 este capabil să gestioneze în mod automat dispozitivele pierdute, adică acele condiții în care randare scena este pierdut, de exemplu , atunci când o fereastră care conține o aplicație D3D10 este redusă la minimum. Cu Direct3D9 în acel moment a fost necesar să se oprească redarea, deoarece nimeni nu ar vedea rezultatul desenului. De asemenea, gestionează recuperarea dispozitivelor atunci când trece de la o stare de blocare la un desen (de la minimizat la maximizat). Anterior era necesar, în fiecare cadru, să verificați starea dispozitivului și să resetați, dacă este necesar, în acest fel

 if (FAILED (device-> TestCooperativeLevel ())
     dispozitiv-> Resetare (& d3dpp);

În cazul în care d3dpp este o structură care conține diverse setări ale dispozitivului (dimensiunea tamponului, fereastra pe care să deseneze etc.).

În plus, funcția TestCooperativeLevel a fost înlocuită cu funcția CheckDeviceState care se întoarce mult mai multe informații decât cel precedent.

Geometry Shaders

În noul Shader Model 4.0, există umbrere geometrice, care nu sunt esențiale pentru un joc, dar vor fi extrem de utile. Acestea pot fi considerate ca o extensie a umbrelor vertexului. Umbrele vertexului, după cum sugerează și numele, pot procesa un singur vârf la un moment dat, în timp ce umbrele geometrice vor putea gestiona geometrii întregi.

Pentru fiecare vârf, umbrele vertexului returnează 1 vârf, prin urmare nu poate citi datele de la vârfurile învecinate (acest lucru inhibă diverse tehnici: de exemplu, întorcându-se de la vârful care se citește la triunghiul aparținător): umbrele vertexului primesc de fapt un float4 care indică poziția sa inițială și returnează un altul care indică noua sa poziție (care poate rămâne, de asemenea, neschimbată). Shader-ul geometriei primește în schimb 1 intrare vârf sau triunghi sau până la 6 triunghiuri, dar returnează 1 sau mai multe primitive.

Aceasta înseamnă că dintr-un triunghi simplu în intrare este posibil să creați chiar și 1000 de triunghiuri fără a fi nevoie să le desenați așa cum faceți în mod normal (adică să creați un tampon de vârf sau un tampon de index). Prin urmare, este posibil să variați continuu numărul de triunghiuri care trebuie desenate, în funcție de distanță, inhibând funcțiile D3DX în ceea ce privește numărul de vârfuri care trebuie desenate într-o plasă dată.

Shader-ul de geometrie vă permite să scrieți cod hardware care creează triunghiuri din aer. Acest lucru poate părea inutil, dar să vedem un mic exemplu practic.

De obicei, pentru a atrage marea într-un mod realist, obișnuiești să faci o grilă uriașă de puncte și să le faci să oscileze. Acest lucru ocupă multă memorie.

Dar dacă camera se află la o distanță considerabilă de mare, este inutil să o faceți prea detaliată, deoarece distanța vă împiedică să vedeți detaliile fine. Prin urmare, ar fi util să proporționăm detaliile cu distanța mării.

Folosind umbrele geometrice va fi posibil să se calculeze numărul de poligoane de la distanță, chiar reducându-le la 2! Și, pe măsură ce vă apropiați, puteți crește numărul acestora din urmă, având în același timp un efect realist care va consuma resurse proporțional cu nevoile.

Alte aplicații ale shadere geometrie vor fi în umbre stencil, care motorul grafic Doom3 gestionate prin intermediul procesorului , ceea ce face jocul foarte grele.

Un alt instrument Microsoft lucrează la este XNA , un cadru pentru a sprijini joc de dezvoltare , prin integrarea DirectX, shaderele limbaj de nivel înalt ( HLSL ), și mai mult pe multiple platforme. Acest lucru va face conversia între un sistem XNA și un alt mod considerabil mai ușor, ceea ce face portare de la Xbox la PC (și vice - versa) mult mai ușor.

DirectX 11

Versiunea 11 a DirectX a fost anunțată în Seattle în timpul GameFest 08. Destinată inițial către Windows 7, a fost apoi portată și la Vista. Este un superset al DirectX 10, adică își menține toate API-urile și adaugă funcții noi doar după cum este necesar. În special, cu această versiune a bibliotecilor, mozaicării hardware apare, ceea ce îmbunătățește foarte mult realism scenelor 3D în timp real. Alte inovații importante sunt GPGPU suportul cu DirectCompute API și adoptarea Shader Model 5; suportul pentru multi-threading a fost, de asemenea, mult îmbunătățit. Funcțiile DX11 (cu excepția modelului Shader 5) pot fi, de asemenea, acceptate de hardware compatibil DX9 sau DX10.

DirectX 12

Versiunea 12 a DirectX a fost anunțată de Microsoft la Conferința pentru dezvoltatori de jocuri din 20 martie 2014. Destinată exclusiv Windows 10 și nu este compatibilă cu sistemele de operare anterioare, cea mai importantă caracteristică a sa este de departe un API de nivel scăzut, similar cu ceea ce a dezvoltat deja de AMD cu Mantle , Apple cu Metal și de Khronos Group cu Vulkan . Noul API, ca și al concurenților săi, este mult mai slab și mai rapid, permițând viteze de redare mai mari. În schimb, dezvoltatorul trebuie să se ocupe de gestionarea memoriei. Alte inovații importante ale modelului DX12 sunt: ​​introducerea suportului oficial al modului multi-GPU, care anterior a fost lăsat în seama implementării producătorilor de plăci video. Și introducerea de raze de urmărire pentru Nvidia 20 GeForce seria video de carduri . [1]

Notă

Elemente conexe

Alte proiecte

linkuri externe

Microsoft Portale Microsoft : accedi alle voci di Wikipedia che trattano di microsoft