DirectX- programvare | |
---|---|
Sjanger | Rammeverk (ikke oppført ) |
Utvikler | Microsoft Corporation |
Siste versjon | 12 Ultimate (10. november 2020) |
Operativsystem | Microsoft Windows |
Språk | Shader-språk på høyt nivå |
Tillatelse | EULA ( ikke-fri lisens ) |
Nettsted | DirectX hjemmeside |
DirectX (opprinnelig kalt "Game SDK") er en samling APIer for forenklet spillutvikling for Microsoft Windows -operativsystemet . Utviklingssettet ( SDK ) er tilgjengelig gratis på Microsofts nettsted . DirectX ble distribuert av spillprodusentene selv sammen med spillet, men de er også inkludert direkte i operativsystemet. I Windows XP er det versjon 9.0c av bibliotekene, i Windows Vista er det mulig å installere versjon 11 med spesifikke oppdateringer, i Windows 7 og 8 er versjon 11 allerede inkludert, mens i Windows 10versjon 12 er allerede til stede.
De ulike komponentene i DirectX-bibliotekene er tilgjengelige for programmereren som objekter som tilsvarer COM -spesifikasjonen .
Komponentene som er inkludert i DirectX 9.0c er:
Opprinnelig ment for spillutviklerindustrien , har DirectX også blitt mye brukt i industrier med andre typer programvare. For eksempel er Direct3D stadig mer populært innen ingeniørfaget , takket være muligheten til raskt å gjengi 3D-grafikk av høy kvalitet ved å bruke de nyeste 3D -skjermkortene .
I 1994 var Microsoft på nippet til å markedsføre det nye operativsystemet - Windows 95 . Hovedfaktoren som vil avgjøre brukertilfredsheten med dette nye operativsystemet vil være hvilke programmer som kan kjøre på maskiner som brukte det. Microsoft var bekymret, fordi programmerere hadde en tendens til å se Microsofts tidligere operativsystem, DOS , som den beste plattformen for programmering av spill, noe som betydde at få spill ville bli utviklet for Windows 95 og operativsystemet ville ikke være særlig vellykket.
DOS tillot direkte tilgang til skjermkort, tastaturer og mus, eksterne enheter og alle andre deler av operativsystemet, mens Windows 95, med sin nye plug-and-play- modell , begrenset tilgangen til alle disse enhetene ved å jobbe med en mer standardisert modell. Microsoft trengte en måte å gi programmerere det de ville ha, og nå, ettersom operativsystemet bare var måneder unna utgivelse. Microsoft begynte å utvikle et grafikk-API internt fra slutten av 1994 , men etter mange måneder bestemte Microsoft at det ikke var nok tid til å la det bygge API-et fra bunnen av. I februar 1995 tok Microsoft beslutningen om å anskaffe britiske 3D Rendermorphics, inkludert API-laboratoriet, 3D graphics API Reality Lab, ved å gjenutvikle APIen som tok navnet DirectX.
Den første versjonen av DirectX ble utgitt i september 1995 under navnet Windows Games SDK. Det var Win32 API som ville erstatte det utilstrekkelige og dårlig fødte API for Win16- operativsystemet (DCI og WinG ). DirectX-utviklingen ble fulgt av teamet til Craig Eisler (prosjektleder), Alex St. John (teknologievangelist) og Eric Engstrom (programleder). Enkelt sagt tillot det alle versjoner av Microsoft Windows, fra og med Windows 95, å inkludere multimedia av høy kvalitet.
Før DirectX eksisterte, hadde Microsoft allerede inkludert OpenGL på sin Windows NT- plattform . På den tiden krevde OpenGL avansert maskinvare og var begrenset til ingeniør- og CAD -bruk . Direct3D burde vært en liten hjelper for spillorientert OpenGL. Etter hvert som kraften til skjermkort og datamaskinene de kjører på vokste, ble OpenGL mainstream. På dette tidspunktet begynte en "kamp" mellom fans av OpenGL (kryssplattform) og Direct3D (kun Windows), som mange omtalte som et annet eksempel på Microsofts taktikk. Imidlertid er de andre DirectX API-ene ofte kombinert med OpenGL i mange videospill siden OpenGL ikke inkluderer alle funksjonene til DirectX (som støtte for lyd eller joystick). Mange forsøk i denne retningen har mislyktes.
DirectX ble brukt som grunnlag for Microsofts Xbox - konsoll API . API-en ble utviklet i samarbeid mellom Microsoft og nVidia , som utviklet maskinvaren som ble brukt i konsollen. Xbox API ligner på DirectX versjon 8.1, men kan ikke oppgraderes i motsetning til andre konsollteknologier.
I 2002 slapp Microsoft DirectX 9 med støtte for bruk med mer kompliserte programmer enn før, med piksel- og vertex shader versjon 2.0. Microsoft fortsatte å oppdatere DirectX ved å legge til shader modell 3.0-funksjoner i DirectX 9.0c i august 2004 .
Med versjon 8 ble wrappers for .Net framework introdusert slik at du kan utvikle direkte med denne plattformen.
DirectX versjon | Versjonsnummer | Operativsystem | Distribusjonsdato |
---|---|---|---|
DirectX 1.0 | 4.02.0095 | 30. september 1995 | |
DirectX 2.0 | ? | Sendes kun med enkelte 3D-partyapplikasjoner | 1996 |
DirectX 2.0a | 4.03.00.1096 | Windows 95 OSR2 og Windows NT 4.0 | 5. juni 1996 |
DirectX 3.0 | 4.04.00.0068 | 15. september 1996 | |
4.04.00.0069 | Den senere versjonen av DirectX 3.0 inkluderte Direct3D 4.04.00.0069 | 1996 | |
DirectX 3.0a | 4.04.00.0070 | Windows NT 4.0 Service Pack 3 (og nyere) Siste støttede versjon av DirectX for Windows NT 4.0 |
desember 1996 |
DirectX 3.0b | 4.04.00.0070 | Det var en mindre oppdatering til 3.0a som fikset et kosmetisk problem med den japanske versjonen av Windows 95 | desember 1996 |
DirectX 4.0 | Aldri distribuert | ||
DirectX 5.0 | 4.05.00.0155 (RC55) | Tilgjengelig som beta for Windows NT 5.0, men kan også installeres på Windows NT 4.0 | 16. juli 1997 |
DirectX 5.2 | 4.05.01.1600 (RC00) | DirectX versjon 5.2 for Windows 95 | 5. mai 1998 |
4.05.01.1998 (RC0) | DirectX versjon 5.2 for Windows 98 | 5. mai 1998 | |
DirectX 6.0 | 4.06.00.0318 (RC3) | Windows CE som en implementering på Dreamcast | 7. august 1998 |
DirectX 6.1 | 4.06.02.0436 (RC0) | 3. februar 1999 | |
DirectX 6.1a | 4.06.03.0518 (RC0) | Windows 98 SE eksklusivt | 5. mai 1999 |
DirectX 7.0 | 4.07.00.0700 (RC1) | 22. september 1999 | |
4.07.00.0700 | Windows 2000 | 17. februar 2000 | |
DirectX 7.0a | 4.07.00.0716 (RC0) | 8. mars 2000 | |
4.07.00.0716 (RC1) | 2000 | ||
DirectX 7.1 | 4.07.01.3000 | Eksklusivt for Windows Me | 14. september 1999 |
DirectX 8.0 | 4.08.00.0400 (RC10) | 12. november 2000 | |
DirectX 8.0a | 4.08.00.0400 (RC14) | Siste versjon støttet for Windows 95 | 5. februar 2001 |
DirectX 8.1 | 4.08.01.0810 | Windows XP , Windows Server 2003 og Xbox eksklusive | 25. oktober 2001 |
4.08.01.0881 (RC7) | Versjon for tidligere operativsystemer (Windows 98, Windows Me og Windows 2000) |
8. november 2001 | |
DirectX 8.1a | 4.08.01.0901 (RC?) | Denne utgivelsen inkluderer en oppdatering for Direct3D (D3d8.dll) | 2002 |
DirectX 8.1b | 4.08.01.0901 (RC7) | Denne oppdateringen inkluderer en rettelse for DirectShow på Windows 2000 (Quartz.dll) | 25. juni 2002 |
DirectX 8.2 | 4.08.02.0134 (RC0) | Som DirectX 8.1b med tillegg av DirectPlay 8.2 | 2002 |
DirectX 9.0 | 4.09.00.0900 (RC4) | 19. desember 2002 | |
DirectX 9.0a | 4.09.00.0901 (RC6) | 26. mars 2003 | |
DirectX 9.0b | 4.09.0000.0902 (RC2) | 13. august 2003 | |
DirectX 9.0c | 4.09.00.0903 | Eksklusiv Windows XP Service Pack 2 | |
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 og Xbox 360 (modifisert versjon) | 6. august 2004 | |
DirectX 9.0c - periodiske oppdateringer | 4.09.00.0904 (RC0) | Den 13. desember 2004 er den siste 32-biters versjonen som bare er tilstrekkelig for Windows Me og Windows 2000 32-bit. | Tomånedlige oppdateringer fra oktober 2004 til august 2007, og deretter kvartalsvis; Siste versjon: november 2010 |
DirectX 10 | 6.00.6000.16386 | Eksklusivt for Windows Vista | 30. november 2006 |
6.00.6000.00000 | Utgave modifisert for Windows XP av KM-programvare | 4. desember 2007 | |
6.00.6001.18000 | Windows Vista SP1 , Windows Server 2008 inkluderer Direct3D 10.1 som introduserer 4.1 shader-modeller |
4. februar 2008 | |
DirectX 11 | 6.01.7600.16385 | Windows Vista SP2 og Server 2008 SP2 , gjennom plattformoppdateringen for Windows Vista og en tilleggsoppdatering fra Windows Update, 7 og Server 2008 R2 | 27. oktober 2009 |
DirectX 11.1 | 6.02.9200.16384 | Windows 8 , Phone 8 , Windows Server 2012 | 26. oktober 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. juli 2015 |
Maskinvareprodusenter må skrive drivere for hver komponent og teste dem for å gjøre dem DirectX-kompatible. Mange moderne periferiutstyr har DirectX-kompatible drivere (med andre ord, du må installere DirectX før du kan bruke den maskinvaren). Tidlige versjoner av DirectX inkluderte et oppdatert bibliotek med alle kompatible drivere som var tilgjengelig frem til det tidspunktet. Denne oppførselen har blitt avbrutt til fordel for den automatiske oppdateringen som gjøres med Windows Update , som lar brukere kun laste ned driverne relatert til maskinvaren deres, i stedet for hele biblioteket.
Noen drivere støtter bare én versjon av DirectX. Men DirectX er bakoverkompatibel , noe som betyr at nyere versjoner støtter eldre. For eksempel, hvis du har DirectX 9 installert på et system og kjører et spill skrevet for DirectX 6, bør det fortsatt fungere. Spillet vil bruke det som er kjent som "grensesnittet" for DirectX 6. Enhver ny versjon av DirectX må støtte enhver tidligere versjon.
DirectX10 har nye, raskere DLL-er takket være oppgivelsen av bakoverkompatibilitet med tidligere versjoner. Dette administreres derfor ikke av DirectX 10, men av DirectX 9.0L som er parallelle med Windows Vista-operativsystemet. Støtte for Shader Model 4.0 og unified Geometry Shaders eller shaders . Unified shaders lar deg bruke hvilken som helst av shader-enhetene som er tilgjengelige på grafikkortet, likegyldig for beregning av piksler, toppunkter, geometrier, etc. på denne måten er det mulig å utnytte all datakraften til grafikkortet når som helst. DirectX 10, takket være den nye Windows Vista-kjernen, lar deg gjengi mer komplekse scener med mindre CPU-intervensjon, ved å administrere belastningsbalansen mellom CPU og GPU, med optimaliserte overføringer. Objektoverheaden reduseres drastisk, det vil si den ekstra beregningstiden for å lage objektene, takket være det faktum at med DX10 skjer opprettelsen direkte på GPU uten først å gå gjennom CPU for hvert objekt (mens med DX9 allerede fra kl. 500 objekter flaskehalsen mellom API og CPU ble merkbar og ytelsen falt kraftig).
DirectX10 har gjort noen store endringer som revolusjonerer måten du skriver RealTime-applikasjoner på, og nå skal vi ta en titt på noen av dem.
I DirectX10 er det en annen filosofi når det gjelder bruk av Device. Nå blir det ikke sett på som det totale kontrollsenteret til en applikasjon, men dens oppgaver blir lettere ved å plassere den på et ressursnivå, uansett hva som trengs (en tekstur, en toppunktbuffer eller annet) må og kan bare opprettes gjennom enheten. Så det vil ikke lenger være de typiske funksjonene for å handle via enhet på gjengivelsen, som vi kan se i dette eksemplet av D3D9.
Anta at enheten er en gyldig og fungerende peker til IDirect3DDevice9-klassen
device-> SetTexture (ExampleTexture); // Skriv inn teksturen for neste gjengivelse device-> SetRenderState (D3DRS_LIGHTENABLE, false) // Slå av lyseneI dette lille eksemplet er det mulig å innse at alt som må legges inn for gjengivelse gjøres via Device. Dette kalles den faste rørledningen. I D3D10 er dette avskaffet, og erstattet det med Shaders : derfor må hver D3D10-applikasjon ledsages av minst én shader, ellers vil det ikke være mulig å gjengi noe.
Denne revolusjonen vil gi betydelige vanskeligheter for de som ønsker å nærme seg 3D-verdenen gjennom Direct3D10, da det vil være vanskeligere å forstå gjengivelsesmekanismen.
D3DX, den berømte lib født med DirectX8 for å gjøre oppgaven enklere for programmerere, har blitt modifisert.
For det første har mange funksjoner og klasser på shaders (D3DXCompileShaderFromFile, D3DXAssembleShaderFromFile) blitt overført fra D3DX til D3D. Det betyr at de har byttet fra hjelpebiblioteket til hovedbiblioteket. Dette understreker enda mer det faktum at skyggeleggingen er i ferd med å bli grunnleggende i Direct3D10. Ulike klasser for håndtering av animasjoner er fullstendig fjernet (ID3DXAllocateHiearchy, D3DXMeshContainer, D3DXFrame), dette betyr et nytt animasjonssystem. Programmererne som lenge har kritisert animasjonssystemet til Direct3D9, kanskje litt for ekkelt å administrere, vil glede seg veldig over dette.
Direct3D10 er automatisk i stand til å håndtere tapte enheter , det vil si de forholdene der scenegjengivelse går tapt, for eksempel når et vindu som inneholder en D3D10-applikasjon minimeres. Med Direct3D9 på den tiden var det nødvendig å slutte å gjengi, siden ingen ville se resultatet av tegningen. Den administrerer også gjenoppretting av enheter når de går fra en stall-tilstand til en tegning (fra minimert til maksimert). Tidligere var det nødvendig, i hver ramme, å sjekke statusen til enheten, og tilbakestille om nødvendig, på denne måten
if (FAILLED (enhet-> TestCooperativeLevel ()) enhet-> Tilbakestill (& d3dpp);Hvor d3dpp er en struktur som inneholder ulike enhetsinnstillinger (størrelse på tilbakebufferen, vindu som skal tegnes på osv.).
Videre er TestCooperativeLevel- funksjonen erstattet av CheckDeviceState- funksjonen som returnerer mye mer informasjon enn den forrige.
I den nye Shader Model 4.0 er det geometriskyggere, ikke avgjørende for et spill, men de vil være ekstremt nyttige. Disse kan betraktes som en forlengelse av vertex shader. Toppunktshaderen, som navnet tilsier, kan kun behandle ett toppunkt om gangen, mens geometrishadere vil kunne håndtere hele geometrier.
For hvert toppunkt returnerer toppunktet 1 toppunkt, derfor kan den ikke lese dataene fra nabopunktene (dette hindrer ulike teknikker: for eksempel å gå tilbake fra toppunktet som leses til trekanten den tilhører): toppunktsskyggeren mottar faktisk en float4 som indikerer dens utgangsposisjon, og returnerer en annen som indikerer dens nye posisjon (som også kan forbli uendret). Geometriskyggeren mottar i stedet som inngang 1 toppunkt eller en trekant eller opptil 6 trekanter, men returnerer 1 eller flere primitiver.
Dette betyr at fra en enkel trekant i input er det mulig å lage til og med 1000 trekanter uten å måtte tegne dem som du vanligvis gjør (dvs. lage en toppunktbuffer eller indeksbuffer). Det er derfor mulig å kontinuerlig variere antall trekanter som skal tegnes, avhengig av avstanden, noe som hindrer D3DX-funksjonene angående antall toppunkter som skal tegnes i en gitt maske.
Geometriskyggeren lar deg skrive maskinvarekode som lager trekanter ut av løse luften. Dette kan virke unødvendig, men la oss se et lite praktisk eksempel.
Vanligvis, for å tegne havet på en realistisk måte, bruker du å lage et stort rutenett med punkter og få dem til å svinge. Dette tar opp mye minne.
Men hvis kameraet er i betydelig avstand fra havet, nytter det ikke å gjøre det for detaljert da avstanden hindrer deg i å se de fine detaljene. Det vil derfor være nyttig å proporsjonere detaljene med avstanden til havet.
Ved å bruke geometriskyggerne vil det være mulig å beregne antall polygoner fra avstanden, til og med redusere dem til 2! Og når du kommer nærmere vil du kunne øke antallet av sistnevnte, samtidig som du får en realistisk effekt som vil forbruke ressurser i forhold til behovet.
Andre bruksområder for geometriskyggerne vil være i sjablongskygger, som Doom3-grafikkmotoren administrerte via CPU , noe som gjør spillet veldig tungt.
Et annet verktøy Microsoft jobber med er XNA , et rammeverk for å hjelpe spillutvikling ved å integrere DirectX, høynivåspråkskyggere ( HLSL ) og mer på tvers av flere plattformer. Dette vil gjøre konverteringen mellom ett XNA-system og et annet betydelig enklere, og gjøre portering fra Xbox til PC (og omvendt) mye enklere.
Versjon 11 av DirectX ble annonsert i Seattle under GameFest 08. Opprinnelig rettet mot Windows 7, ble den også brakt til Vista. Det er et supersett av DirectX 10, det vil si at det opprettholder alle API-ene og legger til nye funksjoner bare etter behov. Spesielt med denne versjonen av bibliotekene dukker maskinvaretesselasjon opp , noe som i stor grad forbedrer realismen til 3D-scener i sanntid. Andre viktige innovasjoner er GPGPU -støtten med DirectCompute API og bruken av Shader Model 5; støtte for multithreading har også blitt kraftig forbedret. DX11-funksjoner (unntatt Shader Model 5) kan også støttes av DX9- eller DX10-kompatibel maskinvare.
Versjon 12 av DirectX ble kunngjort av Microsoft på Game Developer Conference 20. mars 2014. Rettet utelukkende mot Windows 10 og ikke kompatibel med tidligere operativsystemer, er dens desidert viktigste funksjon et lavt nivå API, lik det som allerede er utviklet av AMD med Mantle , Apple med Metal og av Khronos Group med Vulkan . Det nye API-et, i likhet med konkurrentene, er mye slankere og raskere, noe som gir mulighet for høyere gjengivelseshastigheter. Motsatt må utvikleren ta seg av all minnehåndtering. Andre viktige nyvinninger av DX12 er: introduksjonen av den offisielle støtten for multi-GPU-modusen, som tidligere ble overlatt til implementeringen av skjermkortprodusentene. Og introduksjonen av ray tracing for Nvidia GeForce 20 -serien med skjermkort . [1]