DirectX

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
DirectX
programari
Logotip
Tipus Marc (no apareix a la llista )
Desenvolupador Microsoft Corporation
Última versió 12 (19 de maig de 2019)
Sistema operatiu Microsoft Windows
Llicència EULA
( llicència no gratuïta )
Lloc web Pàgina inicial de DirectX

DirectX (originalment anomenat "SDK de joc") és una col·lecció d' APIs per al desenvolupament de jocs simplificat per al sistema operatiu Microsoft Windows . El kit de desenvolupament (SDK) està disponible de forma gratuïta al lloc web de Microsoft . DirectX va ser distribuït pels mateixos fabricants de jocs juntament amb el joc, però també s’inclouen directament al sistema operatiu. Al Windows XP hi ha la versió 9.0c de les biblioteques, al Windows Vista és possible instal·lar la versió 11 amb actualitzacions específiques, al Windows 7 i 8 la versió 11 ja està inclosa, mentre que al Windows 10 ja hi ha la versió 12.

API DirectX

Els diversos components de les biblioteques DirectX estan disponibles per al programador com a objectes que corresponen a l’especificació COM .

Els components inclosos a DirectX 9.0c són:

  1. DirectX Graphics : permet la presentació de gràfics 2D i 3D a la pantalla, relacionant-se directament amb la targeta de vídeo .
    Permet al programador explotar directament el potencial del maquinari de la PC, passant per alt la interfície de dispositiu gràfic de Windows (GDI) i la interfície de dispositiu de visualització (DDI) . Les funcions que no són compatibles amb el maquinari s’emulen mitjançant programari mitjançant DirectX gràcies a la capa d’emulació de maquinari (HEL) .
    Consisteix en una API de baix nivell (Direct3D) i una d’alt nivell (Direct3DX).
    • Direct3D: està dissenyat per a aplicacions gràfiques complexes que requereixen una freqüència d’actualització de pantalla elevada (com ara videojocs ). Fins a la versió 8.0 hi havia DirectDraw (gràfics 2D) i Direct3D (només gràfics 3D), de les quals a les darreres versions només hi ha l’API per a gràfics tridimensionals (que, si cal, també es renderitza en 2D mitjançant polígons amb textura sense perspectiva).
    • Direct3DX: es basa en Direct3D per oferir funcions similars amb menys complexitat.
    • El traçat de raigs DirectX: en temps real el traçat de raigs per DirectX 12, abreujat DXR.
  2. DirectInput : gestiona l'entrada que dóna el teclat , el ratolí , el joystick o qualsevol altre perifèric de joc, passant per alt el sistema de missatges de Windows i accedint directament al maquinari, ja sigui analògic o digital . Admet efectes de retroalimentació forçada.
  3. DirectPlay : proporciona suport per a jocs de xarxa. Consisteix principalment en un protocol de nivell "d'aplicació" (vegeu el model OSI ) que gestiona objectes lògics com la sessió del joc i els jugadors (diferenciats a distància i local).
    En general, però, l’ús de DirectPlay està connectat a una considerable sobrecàrrega de comunicació, per la qual cosa ha rebut una càlida recepció entre els desenvolupadors, que més sovint han recorregut a implementacions de xarxa ad-hoc mitjançant socket (que permet qualsevol compatibilitat amb servidors de jocs a Linux , cosa impossible amb DirectX vinculat al sistema operatiu Microsoft). DirectPlay continua inclòs a DirectX, però ja no s’està desenvolupant. (Aquesta funció s'elimina de manera predeterminada a Windows 8.1, però es pot reinstal·lar mitjançant "Programes i funcions").
  4. DirectSound : interfícies amb la targeta de so per reproduir i gravar efectes de so. Admet l'àudio posicional (que simula l'espacialitat del so 3D).
    Els sons es poden canviar mitjançant efectes de memòria intermèdia d’entrada diferent ( memòria intermèdia secundària de so) i, a continuació, es barregen a la memòria intermèdia d’una sortida (so primari de memòria intermèdia). Els buffers d’entrada poden ser estàtics (de fitxers) o dinàmics (transmissions des d’un micròfon, etc.) i la seva quantitat depèn exclusivament de la potència computacional de l’ordinador. DirectSound pot confiar en la funcionalitat de la targeta de so, en cas que admeti els efectes requerits. Tres efectes són el volum, l’ equalització , la panoràmica , la reverb , la distorsió , diversos efectes tridimensionals i la simulació de l’ efecte Doppler .
  5. DirectMusic : admet la reproducció de música ( MIDI , però no MP3 ). Ofereix la funcionalitat d'un sintetitzador de programari quan sigui necessari.
  6. DirectShow : gestiona diversos fitxers multimèdia (per exemple, pel·lícules MPEG o àudio MP3 ) i admet la transmissió a través d' Internet .
  7. DirectSetup : permet al programador detectar DirectX instal·lat i actualitzar-ne els components durant la instal·lació del seu programa.
  8. Objectes multimèdia DirectX : permet modificar els fluxos d'àudio i vídeo, de manera que es puguin reproduir mitjançant DirectShow o DirectSound.

Història

Destinat originalment a la indústria dels desenvolupadors de videojocs , DirectX també s'ha utilitzat àmpliament en indústries d'altres tipus de programari. Per exemple, Direct3D és cada vegada més popular en el camp de l' enginyeria , gràcies a la possibilitat de representar ràpidament gràfics 3D d'alta qualitat mitjançant les últimes targetes de vídeo 3D.

El 1994 , Microsoft estava a punt de comercialitzar el nou sistema operatiu : Windows 95 . El principal factor que determinaria la satisfacció dels usuaris amb aquest nou sistema operatiu seria els programes que podrien executar-se a les màquines que l’utilitzaven. Microsoft estava preocupat, perquè els programadors tendien a veure el sistema operatiu anterior de Microsoft, DOS , com la millor plataforma per programar jocs, cosa que significava que es desenvoluparien pocs jocs per a Windows 95 i que el sistema operatiu no tindria molt èxit.

DOS permetia l’accés directe a targetes de vídeo, teclats i ratolins, perifèrics d’àudio i totes les altres parts del sistema operatiu, mentre que Windows 95, amb el seu nou model plug-and-play , limitava l’accés a tots aquests dispositius treballant en un sistema més estandarditzat. model. Microsoft necessitava una manera de donar als programadors el que volien, i ara, ja que el sistema operatiu estava a pocs mesos de la seva publicació. Microsoft va començar a desenvolupar una API gràfica a casa a finals de 1994 , però després de molts mesos Microsoft va decidir que no hi havia prou temps per permetre-li construir l'API des de zero. El febrer de 1995 , Microsoft va prendre la decisió d'adquirir British 3D Rendermorphics, incloent el seu laboratori d'API, els gràfics en 3D API Reality Lab, en tornar a desenvolupar l'API que prenia el nom de DirectX.

La primera versió de DirectX es va publicar el setembre de 1995 amb el nom de Windows Games SDK. Va ser l'API Win32 que substituiria l'API insuficient i mal nascuda per al sistema operatiu Win16 (DCI i WinG ). El desenvolupament de DirectX va ser seguit per l’equip de Craig Eisler (líder del projecte), Alex St. John (evangelista tecnològic) i Eric Engstrom (gerent del programa). En poques paraules, permetia a totes les versions de Microsoft Windows, començant per Windows 95, incorporar multimèdia d'alta qualitat.

Abans que existís DirectX, Microsoft ja havia inclòs OpenGL a la seva plataforma Windows NT . En aquell moment, OpenGL requeria maquinari de gamma alta i es limitava a l’ ús d’ enginyeria i CAD . Direct3D hauria d’haver estat un petit ajut per a OpenGL orientat al joc. A mesura que creixia la potència de les targetes de vídeo i dels ordinadors en què funcionen, OpenGL es va convertir en un model principal. En aquest moment va començar una "batalla" entre els fans d'OpenGL (multiplataforma) i Direct3D (només Windows), que molts es van referir a ells com un exemple més de la tàctica de Microsoft. No obstant això, les altres API DirectX es combinen sovint amb OpenGL en molts videojocs, ja que OpenGL no inclou totes les funcions de DirectX (com ara el suport per al so o el joystick). Molts intents en aquesta direcció han fracassat.

DirectX es va utilitzar com a base per a l'API de la consola Xbox de Microsoft. L'API es va desenvolupar en col·laboració entre Microsoft i nVidia , que va desenvolupar el maquinari utilitzat a la consola. L'API Xbox és similar a la versió 8.1 de DirectX, però no es pot actualitzar a diferència d'altres tecnologies de consola.

El 2002 , Microsoft va llançar DirectX 9 amb compatibilitat per utilitzar-lo amb programes més complicats que abans, amb píxels i vèrtex shader versió 2.0. Microsoft va continuar actualitzant DirectX afegint funcions del model shader 3.0 a DirectX 9.0c a l'agost de 2004 .

Amb la versió 8, es van introduir embolcalls per a .Net Framework perquè pugueu desenvolupar-vos directament amb aquesta plataforma.

Versió DirectX Número de versió Sistema operatiu Data de distribució
DirectX 1.0 4.02.0095 30 de setembre de 1995
DirectX 2.0 ? Només s’envia amb algunes aplicacions de festa en 3D 1996
DirectX 2.0a 4.03.00.1096 Windows 95 OSR2 i Windows NT 4.0 5 de juny de 1996
DirectX 3.0 4.04.00.0068 15 de setembre de 1996
4.04.00.0069 La versió posterior de DirectX 3.0 incloïa Direct3D 4.04.00.0069 1996
DirectX 3.0a 4.04.00.0070 Windows NT 4.0 Service Pack 3 (i versions posteriors)
Última versió compatible de DirectX per a Windows NT 4.0
Desembre de 1996
DirectX 3.0b 4.04.00.0070 Va ser una actualització menor a 3.0a que va solucionar un problema estètic amb la versió japonesa de Windows 95 Desembre de 1996
DirectX 4.0 Mai distribuït
DirectX 5.0 4.05.00.0155 (RC55) Disponible en versió beta per a Windows NT 5.0, però també instal·lable a Windows NT 4.0 16 de juliol de 1997
DirectX 5.2 4.05.01.1600 (RC00) Versió DirectX 5.2 per a Windows 95 5 de maig de 1998
4.05.01.1998 (RC0) Versió DirectX 5.2 per a Windows 98 5 de maig de 1998
DirectX 6.0 4.06.00.0318 (RC3) Windows CE com a implementació a Dreamcast 7 d’agost de 1998
DirectX 6.1 4.06.02.0436 (RC0) 3 de febrer de 1999
DirectX 6.1a 4.06.03.0518 (RC0) Windows 98 SE exclusiu 5 de maig de 1999
DirectX 7.0 4.07.00.0700 (RC1) 22 de setembre de 1999
4.07.00.0700 Windows 2000 17 de febrer de 2000
DirectX 7.0a 4.07.00.0716 (RC0) 8 de març del 2000
4.07.00.0716 (RC1) 2000
DirectX 7.1 4.07.01.3000 Windows Me exclusiu 14 de setembre de 1999
DirectX 8.0 4.08.00.0400 (RC10) 12 de novembre del 2000
DirectX 8.0a 4.08.00.0400 (RC14) Última versió compatible amb Windows 95 5 de febrer de 2001
DirectX 8.1 4.08.01.0810 Windows XP , Windows Server 2003 i Xbox exclusiu 25 d'octubre de 2001
4.08.01.0881 (RC7) Versió per a sistemes operatius antics
(Windows 98, Windows Me i Windows 2000)
8 de novembre de 2001
DirectX 8.1a 4.08.01.0901 (RC?) Aquesta versió inclou una actualització per a Direct3D (D3d8.dll) 2002
DirectX 8.1b 4.08.01.0901 (RC7) Aquesta actualització inclou una correcció per a DirectShow al Windows 2000 (Quartz.dll) 25 de juny de 2002
DirectX 8.2 4.08.02.0134 (RC0) Igual que DirectX 8.1b amb l’addició de DirectPlay 8.2 2002
DirectX 9.0 4.09.00.0900 (RC4) 19 de desembre de 2002
DirectX 9.0a 4.09.00.0901 (RC6) 26 de març de 2003
DirectX 9.0b 4.09.0000.0902 (RC2) 13 d'agost de 2003
DirectX 9.0c 4.09.00.0903 Windows XP Service Pack 2 exclusiu
4.09.00.0904 (RC0) 4 d’agost de 2004
4.09.00.0904 Windows XP Service Pack 2, Windows Server 2003 Service Pack 1, Windows Server 2003 R2 i Xbox 360 (versió modificada) 6 d’agost de 2004
DirectX 9.0c: actualitzacions periòdiques 4.09.00.0904 (RC0) La del 13 de desembre de 2004 és la darrera versió de 32 bits només suficient per a Windows Me i Windows 2000 de 32 bits. Actualitzacions bimensuals d’octubre de 2004 a agost de 2007 i posteriorment trimestrals; Última versió: novembre de 2010
DirectX 10 6.00.6000.16386 Windows Vista exclusiu 30 de novembre de 2006
6.00.6000.00000 Edició modificada per a Windows XP per KM-Software 4 de desembre de 2007
6.00.6001.18000 Windows Vista SP1 , Windows Server 2008
inclou Direct3D 10.1 que introdueix models de shader 4.1
4 de febrer de 2008
DirectX 11 6.01.7600.16385 Windows Vista SP2 i Server 2008 SP2 , mitjançant l’ actualització de plataforma per a Windows Vista i una actualització addicional de Windows Update, 7 i Server 2008 R2 27 d’octubre de 2009
DirectX 11.1 6.02.9200.16384 Windows 8 , Phone 8 , Windows Server 2012 26 d’octubre de 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 de juliol de 2015

Compatibilitat

Els fabricants de maquinari han d’escriure controladors per a cada component i provar-los perquè siguin compatibles amb DirectX. Molts perifèrics de maquinari moderns tenen controladors compatibles només amb DirectX (és a dir, heu d’instal·lar DirectX abans de poder utilitzar aquest maquinari). Les primeres versions de DirectX incloïen una biblioteca actualitzada de tots els controladors compatibles disponibles fins aquell moment. Aquest comportament s'ha interromput a favor de l'actualització automàtica feta amb Windows Update , que permet als usuaris baixar només els controladors relacionats amb el seu maquinari, en lloc de tota la biblioteca.

Alguns controladors només admeten una versió de DirectX. Però DirectX és compatible amb versions anteriors (compatible amb el passat), cosa que significa que les noves versions admeten versions anteriors. Per exemple, si teniu DirectX 9 instal·lat en un sistema i esteu executant un joc escrit per DirectX 6, encara hauria de funcionar. El joc utilitzarà la coneguda com a "interfície" de DirectX 6. Qualsevol nova versió de DirectX ha de ser compatible amb qualsevol versió anterior.

Canvis a DirectX10

Arquitectura DirectX 10

DirectX10 té noves DLL més ràpides gràcies a l’abandonament de la compatibilitat amb versions anteriors. Per tant, això no és gestionat per DirectX 10, sinó per DirectX 9.0L, que són paral·lels al sistema operatiu Windows Vista. Suport per Shader Model 4.0 i Shaders o shaders de geometria unificada . Els shaders unificats us permeten utilitzar qualsevol de les unitats de sombreador disponibles a la targeta gràfica, indiferentment per al càlcul de píxels, vèrtexs, geometries, etc. d'aquesta manera és possible explotar tota la potència de càlcul de la targeta gràfica en qualsevol moment. DirectX 10, gràcies al nou nucli de Windows Vista, us permet renderitzar escenes més complexes amb menys intervenció de la CPU, gestionant l’equilibri de càrrega entre la CPU i la GPU, amb l’optimització de les transferències. La sobrecàrrega de l’objecte es redueix dràsticament, és a dir, el temps de càlcul addicional per crear els objectes, gràcies al fet que amb el DX10 la creació té lloc directament a la GPU sense passar primer per la CPU de cada objecte (mentre que amb el DX9 ja s’inicia a partir de 500 objectes es va notar el coll d'ampolla entre l'API i la CPU i el rendiment va baixar bruscament).

DirectX10 ha fet grans canvis que revolucionen la forma d’escriure aplicacions en temps real, i ara farem una ullada a algunes d’elles.

Eliminació completa de la canonada fixa

A DirectX10 hi ha una filosofia diferent en l’ús de dispositius. Ara no es veu com el centre de control total d’una aplicació, però les seves tasques s’alleugereixen col·locant-la a un nivell de recurs, tot el que calgui (una textura, una memòria intermèdia de vèrtex o una altra cosa) només es pot crear a través del dispositiu. Per tant, ja no hi haurà les funcions típiques per actuar a través del dispositiu sobre la representació, com podem veure en aquest exemple de D3D9.

Suposem que el dispositiu és un punter vàlid i que funciona a la classe IDirect3DDevice9

 device-> SetTexture (ExampleTexture); // Introduïu la textura per al següent renderitzat
  dispositiu-> SetRenderState (D3DRS_LIGHTENABLE, fals) // Apagueu els llums

En aquest petit exemple, és possible adonar-se que tot el que cal introduir per a la representació es fa mitjançant el dispositiu. Això s’anomena canonada fixa. En aquest D3D10 se suprimeix, substituint-lo pel Shader : D3D10 llavors cada aplicació ha d'anar acompanyada d'almenys un shader, en cas contrari no es podrà representar res.

Aquesta revolució comportarà dificultats importants per a aquells que vulguin apropar-se al món del 3D mitjançant Direct3D10, ja que serà més difícil entendre el mecanisme de renderització.

Canvis a D3DX

S'ha modificat D3DX, la famosa lib nascuda amb DirectX8 per facilitar la tasca als programadors.

En primer lloc, moltes funcions i classes sobre shaders (D3DXCompileShaderFromFile, D3DXAssembleShaderFromFile) s’han passat de D3DX a D3D. Això vol dir que han canviat de la biblioteca auxiliar a la principal. Això subratlla encara més el fet que el shader s'està convertint en fonamental a Direct3D10. S'han eliminat completament diverses classes per a la gestió d'animacions (ID3DXAllocateHiearchy, D3DXMeshContainer, D3DXFrame), això significa un nou sistema d'animació. D’això, els programadors que han criticat durant molt de temps el sistema d’animació de Direct3D9, potser una mica desagradable per gestionar, s’alegraran molt.

Dispositiu automàtic perdut

Direct3D10 és capaç de gestionar automàticament els dispositius perduts , és a dir, aquelles condicions en què es perd la representació d’escena, per exemple, quan es minimitza una finestra que conté una aplicació D3D10. Amb Direct3D9 en aquell moment era necessari deixar de representar, ja que ningú veuria el resultat del dibuix. També gestiona la recuperació de dispositius quan es passa d'un estat de parada a un dibuix (de minimitzat a maximitzat). Anteriorment, en cada marc, era necessari comprovar l'estat del dispositiu i restablir-lo si calia, d'aquesta manera

 if (FAILED (dispositiu-> TestCooperativeLevel ())
     dispositiu-> Restableix (& d3dpp);

On d3dpp és una estructura que conté diversos paràmetres de configuració del dispositiu (mida del buffer posterior, finestra on dibuixar, etc.).

A més, la funció TestCooperativeLevel s’ha substituït per la funció CheckDeviceState que retorna molta més informació que l’anterior.

Geometry Shaders

Al nou model Shader 4.0, hi ha shaders de geometria, no essencials per a un joc, però seran extremadament útils. Es poden considerar com una extensió del vèrtex ombrejat. L’ombrador del vèrtex, com el seu nom indica, només pot processar un vèrtex a la vegada, mentre que els ombrejadors de geometries podran manejar geometries senceres.

Per a cada vèrtex, el vèrtex ombrejat retorna 1 vèrtex, per tant no pot llegir les dades dels vèrtexs veïns (això inhibeix diverses tècniques: per exemple, tornar del vèrtex que s'està llegint al triangle pertanyent): el vèrtex ombrejat de fet rep un float4 que indica la seva posició inicial i en retorna un altre que indica la seva nova posició (que també es pot mantenir sense canvis). En canvi, el sombreador de geometria rep com a entrada 1 vèrtex o triangle o fins a 6 triangles, però retorna 1 o més primitives.

Això significa que a partir d'un simple triangle d'entrada és possible crear fins i tot 1.000 triangles sense haver de dibuixar-los com ho feu normalment (és a dir, crear un buffer de vèrtex o buffer d'índex). Per tant, és possible variar contínuament el nombre de triangles a dibuixar, depenent de la distància, inhibint les funcions D3DX pel que fa al nombre de vèrtexs a dibuixar en una malla determinada.

El sombreador de geometria us permet escriure codi de maquinari que crea triangles a partir de l’aire. Pot semblar innecessari, però vegem un petit exemple pràctic.

Normalment, per dibuixar el mar d’una manera realista, soleu fer una enorme quadrícula de punts i fer-los oscil·lar. Això requereix molta memòria.

Però si la càmera es troba a una distància considerable del mar, no serveix de res que sigui massa detallada perquè la distància impedeix veure els detalls fins. Per tant, seria útil proporcionar els detalls amb la distància del mar.

Utilitzant els ombrejadors de geometria serà possible calcular el nombre de polígons des de la distància, fins i tot reduint-los a 2. I, a mesura que us acosteu, podeu augmentar el nombre d’aquestes, tenint al mateix temps un efecte realista que consumirà recursos proporcionalment a la necessitat.

Altres aplicacions dels shaders de geometria seran les ombres de stencil, que el motor gràfic Doom3 gestionava a través de la CPU , fent que el joc fos molt pesat.

Una altra eina en què Microsoft està treballant és XNA , un marc per ajudar al desenvolupament de jocs integrant DirectX, shaders de llenguatge d'alt nivell ( HLSL ) i molt més en diverses plataformes. Això farà que la conversió entre un sistema XNA i un altre sigui considerablement més fàcil, facilitant la portabilitat de Xbox a PC (i viceversa).

DirectX 11

La versió 11 de DirectX es va anunciar a Seattle durant el GameFest 08. Inicialment dirigida a Windows 7, també es va portar a Vista. És un superconjunt de DirectX 10, és a dir, manté totes les seves API i només afegeix funcions noves segons sigui necessari. En particular, amb aquesta versió de les biblioteques apareix la tessel·lació del maquinari , que millora molt el realisme de les escenes 3D en temps real. Altres innovacions importants són el suport GPGPU amb l'API DirectCompute i l'adopció del model Shader 5; també s'ha millorat molt el suport per a multi-threading. Les funcions DX11 (excepte el model Shader 5) també poden ser compatibles amb maquinari compatible amb DX9 o DX10.

DirectX 12

Microsoft va anunciar la versió 12 de DirectX a la Game Developer Conference del 20 de març de 2014. Dirigida exclusivament a Windows 10 i no compatible amb sistemes operatius anteriors, la seva característica més important és, amb diferència, una API de baix nivell, similar al que ja es va desenvolupar per AMD amb Mantle , Apple amb Metal i per Khronos Group amb Vulkan . La nova API, com les dels seus competidors, és molt més senzilla i ràpida, permetent velocitats de renderització més altes. Per contra, el desenvolupador s’ha d’encarregar de tota la gestió de la memòria. Altres innovacions importants del DX12 són: la introducció del suport oficial del mode multi-GPU, que anteriorment es deixava a la implementació dels fabricants de targetes de vídeo. I la introducció del rastreig de raigs per a la sèrie de targetes de vídeo Nvidia GeForce 20 . [1]

Nota

Articles relacionats

Altres projectes

Enllaços externs

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