DirectX

DirectX-
programvare
SjangerRammeverk  (ikke  oppført )
UtviklerMicrosoft Corporation
Siste versjon12 Ultimate (10. november 2020)
OperativsystemMicrosoft Windows
SpråkShader-språk på høyt nivå
TillatelseEULA
( ikke-fri lisens )
NettstedDirectX 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.

DirectX API

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:

  1. DirectX Graphics : tillater presentasjon av 2D- og 3D-grafikk på skjermen, direkte med skjermkortet .
    Det lar programmereren direkte utnytte potensialet til PC-maskinvaren ved å omgå Windows Graphics Device Interface (GDI) og Display Device Interface (DDI) . Funksjonene som ikke støttes av maskinvaren, emuleres via programvare av DirectX takket være Hardware Emulation Layer (HEL) .
    Den består av et lavt nivå (Direct3D) og et høyt nivå (Direct3DX) API.
    • Direct3D: er designet for komplekse grafikkapplikasjoner som krever en høy skjermoppdateringsfrekvens (som videospill ). Fram til versjon 8.0 var det DirectDraw (2D-grafikk) og Direct3D (kun 3D-grafikk), hvorav det i de nyeste versjonene kun er API for tredimensjonal grafikk (som om nødvendig også gjengir i 2D ved bruk av teksturerte polygoner uten perspektiv).
    • Direct3DX: Basert på Direct3D for å tilby lignende funksjoner med mindre kompleksitet.
    • DirectX Raytracing: Sanntidsstrålesporing for DirectX 12, forkortet DXR .
  2. DirectInput : administrerer input fra tastaturet , musen , joysticken eller et annet perifert spill, omgår Windows -meldingssystemet og får direkte tilgang til maskinvaren, enten den er analog eller digital . Støtter Force Feedback- effekter .
  3. DirectPlay : Gir støtte for nettverksspill. Den består hovedsakelig av en "applikasjons" -nivåprotokoll (se OSI-modellen ) som administrerer logiske objekter som spilløkten og spillerne (differensiert i ekstern og lokal).
    Generelt er imidlertid bruken av DirectPlay forbundet med en betydelig kommunikasjonsoverbelastning, som den har fått en lunken mottakelse for blant utviklerne, som oftere har tydd til ad-hoc nettverksimplementeringer via socket (som tillater all kompatibilitet med spillservereLinux , som er umulig med DirectX koblet til Microsoft-operativsystemet). DirectPlay er fortsatt inkludert i DirectX, men utvikles ikke lenger. (Denne funksjonen er fjernet som standard på Windows 8.1, men kan installeres på nytt via "Programmer og funksjoner").
  4. DirectSound : grensesnitt med lydkortet for avspilling og opptak av lydeffekter. Støtter posisjonslyd (som simulerer romligheten til 3D-lyd).
    Lyder kan redigeres med effekter fra forskjellige sekundære lydbuffere , hvoretter de blandes sammen i singelen Primary Sound Buffer . Inngangsbufferne kan være statiske (fra filer) eller dynamiske (strømmes fra en mikrofon, etc.), og mengden avhenger utelukkende av datamaskinens beregningskraft. DirectSound kan stole på funksjonaliteten til lydkortet, i tilfelle det støtter de nødvendige effektene. Tre effekter er volum, utjevning , panorering , romklang , forvrengning , ulike tredimensjonale effekter og simulering av Doppler-effekten .
  5. DirectMusic : støtter musikkavspilling ( MIDI , men ikke MP3 ). Tilbyr funksjonaliteten til en programvaresynthesizer ved behov.
  6. DirectShow : håndterer ulike multimediefiler (for eksempel MPEG -filmer eller MP3 -lyd ) og støtter strømming via Internett .
  7. DirectSetup : lar programmereren oppdage installert DirectX og oppdatere komponentene under installasjonen av programmet.
  8. DirectX Media Objects : tillater modifisering av lyd- og videostrømmer, slik at de deretter kan reproduseres via DirectShow eller DirectSound.

Historie

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

Kompatibilitet

Maskinvareprodusenter 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.

Endringer i DirectX10

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.

Fullstendig fjerning av den faste rørledningen

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 lysene

I 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.

Endringer i D3DX

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.

Automatisk tapt enhet

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.

Geometri Shaders

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.

DirectX 11

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.

DirectX 12

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]

Merknader

  1. ^ https://www.nvidia.com/en-us/geforce/news/geforce-gtx-ray-tracing-coming-soon/

Relaterte elementer

Andre prosjekter

Eksterne lenker