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 inițial „Game SDK”) este o colecție de API-uri pentru dezvoltarea jocului simplificată pentru sistemul de operare Microsoft Windows . Kitul de dezvoltare (SDK) este disponibil gratuit pe site-ul web Microsoft . 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ă versiunea 9.0c a bibliotecilor, în Windows Vista este posibilă instalarea versiunii 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 programatorului ca obiecte corespunzătoare specificației COM .

Componentele incluse în DirectX 9.0c sunt:

  1. DirectX Graphics : permite prezentarea graficelor 2D și 3D pe ecran, interfațându-se direct cu placa video .
    Permite programatorului să exploateze în mod direct potențialul hardware-ului PC-ului, ocolind interfața Windows Graphics Device Interface (GDI) și Display Device Interface (DDI) . Funcțiile neacceptate de hardware sunt emulate prin software de către DirectX datorită stratului de emulare hardware (HEL) .
    Se compune dintr-un API de nivel scăzut (Direct3D) și un nivel înalt (Direct3DX).
    • Direct3D: este conceput pentru aplicații grafice complexe care necesită o rată de reîmprospătare a ecranului (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: Bazat pe Direct3D pentru a oferi capabilități similare cu mai puțină complexitate.
    • DirectX Raytracing: urmărirea razelor în timp real pentru DirectX 12, prescurtat DXR .
  2. DirectInput : gestionează intrarea dată de tastatură , mouse , joystick sau orice alt periferic de joc, ocolind sistemul de mesaje Windows și accesând direct hardware-ul, fie el analogic sau digital . Sprijină efectele de feedback forțat .
  3. DirectPlay : Oferă suport pentru jocurile de rețea. Acesta constă în principal dintr-un protocol la nivel de „aplicație” (vezi modelul OSI ) care gestionează obiecte logice precum sesiunea de joc și jucătorii (diferențiați la distanță și local).
    În general, însă, utilizarea DirectPlay este conectată la o supraîncărcare de comunicare considerabilă, pentru care a primit o recepție călduță în rândul dezvoltatorilor, care au recurs mai des la implementări de rețea ad-hoc prin socket (care permite orice compatibilitate cu serverele de joc de pe Linux , ceea ce este imposibil cu DirectX conectat la 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 redarea și înregistrarea efectelor de sunet. Suportă sunet pozițional (care simulează spațialitatea sunetului 3D).
    Sunetele pot fi modificate prin efecte de la un buffer de intrare diferit (Buffers secundare de sunet), apoi sunt amestecate împreună în bufferul cu o singură ieșire (Buffer Primary Sound). 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 volum, egalizare , panoramare , reverb , distorsiune , diverse efecte tridimensionale și simularea efectului Doppler .
  5. DirectMusic : acceptă redarea muzicii ( MIDI , dar nu MP3 ). Oferă funcționalitatea unui sintetizator software atunci când este necesar.
  6. DirectShow : gestionează diferite fișiere multimedia (de exemplu filme MPEG sau audio MP3 ) și acceptă streaming prin Internet .
  7. DirectSetup : permite programatorului să detecteze DirectX instalat și să-și actualizeze componentele în timpul instalării programului său.
  8. Obiecte Media DirectX : permite modificarea fluxurilor audio și video, astfel încât acestea să poată fi apoi reproduse prin DirectShow sau DirectSound.

Istorie

Destinat inițial industriei dezvoltatorilor de jocuri video , DirectX a devenit, de asemenea, utilizat pe scară largă în industriile altor tipuri de software. De exemplu, Direct3D este din ce în ce mai popular în domeniul ingineriei , datorită capacității de a reda rapid grafică 3D de înaltă calitate folosind cele mai recente plăci video 3D.

În 1994 , Microsoft era pe punctul de a comercializa noul 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 era îngrijorat, deoarece programatorii tindeau să vadă sistemul de operare anterior Microsoft, DOS , ca fiind cea mai bună platformă pentru programarea jocurilor, ceea ce însemna că puține jocuri vor fi dezvoltate pentru Windows 95 și sistemul de operare nu va avea mare succes.

DOS a permis accesul direct la plăci video, tastaturi și șoareci, periferice audio și toate celelalte părți ale sistemului de operare, în timp ce Windows 95, cu noul său model plug-and-play , a limitat accesul la toate aceste dispozitive, lucrând la un sistem mai standardizat. 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 grafic intern, începând cu sfârșitul anului 1994 , dar după multe luni, Microsoft a decis că nu este suficient timp pentru a-i permite să construiască API-ul de la zero. În februarie 1995 , Microsoft a luat decizia de a achiziționa British 3D Rendermorphics, inclusiv laboratorul său API, grafica 3D API Reality Lab, prin redezvoltarea API-ului care a luat numele de DirectX.

Prima versiune a DirectX a fost lansată în septembrie 1995 sub numele de Windows Games SDK. API-ul Win32 a fost cel care ar înlocui API-ul insuficient și rău născut pentru sistemul de operare Win16 (DCI și WinG ). Dezvoltarea DirectX a fost urmată de echipa lui Craig Eisler (lider de proiect), Alex St. John (evanghelist tehnologic) ș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 ca DirectX să existe, Microsoft a inclus deja OpenGL pe platforma sa Windows NT . La acea vreme, OpenGL necesita hardware de ultimă generație și se limita la inginerie și la utilizarea CAD . Direct3D ar fi trebuit să fie un mic ajutor pentru OpenGL orientat spre joc. Pe măsură ce puterea plăcilor video și a computerelor pe care rulează a crescut, OpenGL a devenit mainstream. În acest moment a început o „luptă” între fanii OpenGL (multiplataforma) și Direct3D (numai Windows), la care mulți au făcut referire ca un alt exemplu de tactică Microsoft. Cu toate acestea, celelalte API DirectX sunt adesea combinate cu OpenGL în multe jocuri video, deoarece OpenGL nu include toate caracteristicile DirectX (cum ar fi suport pentru sunet sau joystick). Multe încercări în această direcție au eșuat.

DirectX a fost folosit ca bază pentru API-ul consolei Xbox a Microsoft. API-ul a fost dezvoltat în colaborare între Microsoft și nVidia , care a dezvoltat hardware-ul folosit î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 utilizare cu programe mai complicate decât înainte, cu pixel și vertex shader versiunea 2.0. Microsoft a continuat să actualizeze DirectX adăugând funcții model shader 3.0 în DirectX 9.0c în august 2004 .

Cu versiunea 8, au fost introduse împachetări pentru .Net framework, astfel încât să puteți dezvolta 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 o versiune ulterioară)
Ultima versiune acceptată a DirectX pentru Windows NT 4.0
Decembrie 1996
DirectX 3.0b 4.04.00.0070 A fost o actualizare minoră la 3.0a care a rezolvat o problemă cosmetică 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 16 iulie 1997
DirectX 5.2 4.05.01.1600 (RC00) Versiunea DirectX 5.2 pentru Windows 95 5 mai 1998
4.05.01.1998 (RC0) Versiunea DirectX 5.2 pentru Windows 98 5 mai 1998
DirectX 6.0 4.06.00.0318 (RC3) Windows CE ca implementare 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 14 septembrie 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 noiembrie 2001
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 o remediere 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) 26 martie 2003
DirectX 9.0b 4.09.0000.0902 (RC2) 13 august 2003
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) Cea din 13 decembrie 2004 este cea mai recentă versiune pe 32 de biți, suficientă doar 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; Ultima versiune: noiembrie 2010
DirectX 10 6.00.6000.16386 Windows Vista exclusiv 30 noiembrie 2006
6.00.6000.00000 Ediție modificată pentru Windows XP de KM-Software 4 decembrie 2007
6.00.6001.18000 Windows Vista SP1 , Windows Server 2008
include Direct3D 10.1 care introduce modele de shader 4.1
4 februarie 2008
DirectX 11 6.01.7600.16385 Windows Vista SP2 și Server 2008 SP2 , prin Platform Update 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 Windows 10 , Windows 10 Mobile , Windows Server 2016 29 iulie 2015

Compatibilitate

Producătorii de hardware trebuie să scrie drivere pentru fiecare componentă și să le testeze 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 includeau o bibliotecă actualizată cu toate driverele compatibile disponibile până în acel moment. Acest comportament a fost întrerupt în favoarea actualizării automate efectuate cu Windows Update , care permite utilizatorilor să descarce doar driverele legate de hardware-ul lor, mai degrabă decât întreaga bibliotecă.

Unele drivere acceptă o singură versiune de DirectX. Dar DirectX este compatibil cu versiunile anterioare (compatibil cu trecutul), ceea ce înseamnă că noile versiuni acceptă versiuni 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 au 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 Shaders sau Shaders Geometry unificate . Umbrele unificate vă permit să utilizați oricare dintre unitățile de umbrire disponibile pe placa grafică, indiferent pentru calculul pixelilor, vârfurilor, geometriilor 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 conducta fixă. În acest D3D10 este eliminat, înlocuindu-l cu Shader : D3D10 atunci fiecare aplicație trebuie să fie însoțită de cel puțin un shader, altfel nu va fi posibil să redați 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 automat dispozitivele pierdute , adică acele condiții în care se pierde redarea scenei, de exemplu atunci când o fereastră care conține o aplicație D3D10 este minimizată. 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ă de funcția CheckDeviceState care returnează mult mai multe informații decât cea 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 obișnuit (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 umbrelor geometrice vor fi în umbrele șablon, pe care motorul grafic Doom3 le-a gestionat prin CPU , făcând jocul foarte greu.

Un alt instrument la care lucrează Microsoft este XNA , un cadru pentru a sprijini dezvoltarea jocurilor prin integrarea DirectX, umbrele de limbaj la nivel înalt ( HLSL ) și multe altele pe mai multe platforme. Acest lucru va face conversia între un sistem XNA și altul considerabil mai ușoară, facilitând portarea de la Xbox la PC (și invers).

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, apare teselarea hardware , ceea ce îmbunătățește foarte mult realismul scenelor 3D în timp real. Alte inovații importante sunt suportul GPGPU cu API-ul DirectCompute și adoptarea modelului Shader 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 ray tracing pentru seria de plăci video Nvidia GeForce 20 . [1]

Notă

Elemente conexe

Alte proiecte

linkuri externe

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