Delen via


Grafische API's in Windows

Windows Vista bevat ondersteuning voor een volledig nieuw beeldschermstuurprogrammamodel dat een belangrijke revisie in het ontwerp van videostuurprogramma's vertegenwoordigt sinds de introductie van het Windows Driver Model (WDM) voor Windows 98. Dit opnieuw ontworpen model weerspiegelt de evolutie van videohardware uit de wereld van 2D-rasterbewerkingen en GDI-toepassingen tot die van 3D-games met hardware voor grafische afbeeldingen met vaste functies, en ten slotte met die van de moderne programmeerbare grafische verwerkingseenheid (GPU) die ondersteuning biedt voor een breed scala aan hoogwaardige grafische toepassingen. Windows 7 en Windows 8 bouwen voort op de grafische infrastructuur van Windows Vista door aanvullende grafische functies en API's te bieden. In deze artikelen worden grafische functies en API's van Windows besproken.

Achtergrond

De primaire API voor het programmeren van graphics sinds de vroege dagen van Windows is de Graphical Device Interface (GDI). Deze API is ontworpen voor het afhandelen van talloze 2D-uitvoerapparaten en vormt de basis voor de Gebruikersinterface-ervaring van Windows. DirectDraw en Direct3D zijn geïntroduceerd als alternatieve API's ter ondersteuning van games op volledig scherm en 3D-rendering als extensies voor de bestaande hardware van de tijd. Interacties met GDI waren ingewikkeld. De effectieve intermixing van traditionele GDI-elementen met Direct3D-elementen is beperkt door dit ontwerp. De Windows XP-versie van WDM, ook wel XPDM genoemd, weerspiegelt de side-by-side aard van GDI en Direct3D (zie afbeelding 1).

Afbeelding 1. Grafische API's in Windows XP

xpdm-

In de loop der jaren is de kracht van 3D-videokaarten aanzienlijk gegroeid tot het punt waar de overgrote meerderheid van de hardware is toegewezen aan deze functie. Een nieuw stuurprogrammamodel, Windows Display Driver Model (WDDM), brengt de GPU en Direct3D naar de voorgrond, waardoor het creëren van een volledig nieuwe ervaring, het 3D-bureaublad, die naadloos de 2D-wereld van GDI combineert met de kracht van moderne programmeerbare GPU's. Met WDDM wordt de videohardware volledig aangedreven door Direct3D, en alle andere grafische interfaces communiceren met de videohardware via het nieuwe Direct3D-model voor centraal stuurprogramma (zie afbeelding 2).

Afbeelding 2. Grafische API's in Windows Vista

wddm-

Zie Windows Vista Display Driver Model (WDDM) Design Guidevoor meer informatie over wddm.

Direct3D 9

Versie 9 van DirectX werd voor het eerst uitgebracht voor Windows in 2002, met volgende updates in 2003 en 2004. Deze API vertegenwoordigt een decennium van ontwikkeling van de DirectX-technologieën, de introductie van krachtigere shader-programmeermodellen voor Direct3D en een volwassenheid die wordt ondersteund door duizenden verzendtitels. Direct3D 9 is de primaire grafische interface op Windows Vista. Het blijft de ideale API die moet worden gebruikt voor het schrijven van 3D-games en -toepassingen die moeten worden uitgevoerd op het brede scala aan bestaande hardware- en Windows-releases. De details van het nieuwe stuurprogrammamodel zijn verborgen voor toepassingen met behulp van de Direct3D 9-interfaces, maar achter de schermen maakt het besturingssysteem optimaal gebruik van de nieuwe mogelijkheden om echte multitasking van de GPU, efficiënter resourcebeheer en robuuste prestaties te bieden.

Om volledige compatibiliteit met oudere versies van Windows te garanderen, moeten sommige eigenaardigheden van het oude stuurprogrammamodel worden geëmuleerd, zelfs met het nieuwe windows Vista-beeldschermmodel. Wanneer een toepassing op volledig scherm bijvoorbeeld de focus verliest, moet worden aangenomen dat alle resources in het videogeheugen (VRAM) verloren zijn gegaan en de resources die zijn gemaakt als onbeheerde resources opnieuw laden, ook al verwerkt het nieuwe stuurprogrammamodel de resources transparant zonder ze uit de apparaatcontext te verwijderen. Zelfs het concept van een beheerd versus standaardresourcetype is specifiek voor het oude stuurprogrammamodel. Een ander voorbeeld is de verwachting van fouten bij het toewijzen van niet-beheerde resources (standaardgroep) boven de hoeveelheid beschikbare VRAM, ook al kan het nieuwe stuurprogrammamodel een bijna onbeperkte hoeveelheid virtueel videogeheugen bieden. Vanwege deze vereisten ontvangen Direct3D-toepassingen die worden uitgevoerd op Windows Vista nog steeds deze foutvoorwaarden. Ze zijn dus beperkt in hun vermogen om de eenvoudige Direct3D 9-interfaces te gebruiken om een aantal functies van het nieuwe stuurprogrammamodel volledig te gebruiken.

Hoewel nieuwe systemen die worden verzonden met Windows Vista videokaarten met WDDM-stuurprogramma's bevatten en nieuwe stuurprogramma's voor een aantal populaire videokaarten zijn opgenomen in het vak, blijft Windows Vista ondersteuning bieden voor het gebruik van oudere XPDM-stuurprogramma's voor upgrades en zakelijke edities. Op systemen die het oude stuurprogrammamodel gebruiken, moeten Direct3D 9- en oudere interfaces worden gebruikt en de werking van het grafische systeem lijkt erg op die van Windows XP (afbeelding 1). WDDM is vereist voor toepassingen voor het gebruik van Direct3D 9Ex, Direct3D 10 en latere versies.

Direct3D 9Ex

De Direct3D 9Ex-interface biedt toegang tot een kleine uitbreiding van de standaard Direct3D 9-API waarmee de gevirtualiseerde resourcetoewijzing, nieuwe verloren apparaatsemantiek en enkele andere nieuwe functies beschikbaar zijn tijdens het uitvoeren op Windows Vista. Door dit uitgebreide object te maken, maakt de Direct3D 9-API gebruik van de nieuwe semantiek en vereist de toepassing daarom verschillende logica (en daarom verschillende codepaden) voor het maken, beheren en foutafhandeling van nieuwe soorten voorwaarden. Deze API is alleen beschikbaar op Windows Vista en vereist WDDM-stuurprogramma's. Omdat Direct3D 9Ex een afzonderlijk API- en stuurprogrammacodepad gebruikt dan Direct3D 9, zijn voor het ondersteunen van deze API aanvullende testcases voor uw toepassing vereist.

De belangrijkste reden voor het maken van de nieuwe Direct3D 9Ex-API was het toestaan van volledige toegang tot de nieuwe mogelijkheden van WDDM, terwijl de compatibiliteit voor bestaande Direct3D-toepassingen behouden blijft. De nieuwe 3D-desktop en veel Windows Vista-specifieke toepassingen maken gebruik van deze versie van Direct3D 9, maar ze zijn niet functioneel wanneer ze worden uitgevoerd op oudere XPDM-stuurprogramma's. Omdat de Direct3D 9Ex-API nooit wordt weergegeven in oudere versies van Windows vanwege een gebrek aan ondersteuning voor de WDDM, beslaan de standaard Direct3D 9-interfaces een veel bredere set systemen. Voor hoogwaardige toepassingen die kunnen profiteren van de volgende generatie videohardware, biedt de volledig nieuwe versie 10 van Direct3D veel nieuwe mogelijkheden die niet worden weergegeven door Direct3D 9Ex. Als gevolg hiervan is Direct3D 9 of Direct3D 10 voor games en de meeste andere toepassingen de aanbevolen API.

Notitie

De DirectX SDK biedt geen voorbeelden, headers of bibliotheken voor de Direct3D 9Ex-interface. Zie DirectX voor Windows Vistavoor meer informatie over Direct3D 9Ex.

Direct3D 10

Om het potentieel van het nieuwe Windows Vista-stuurprogrammamodel en de hardware van de volgende generatie volledig te realiseren, is er een volledig nieuwe versie van de Direct3D-API gemaakt. Hoewel WDDM enkele van de beperkingen voor prestaties in het bestaande grafische systeem elimineert, gaat Direct3D 10 verder door ontwerpknelpunten in de bestaande Direct3D-API te verwijderen en vereenvoudigt het programmeren van de GPU aanzienlijk.

De nieuwe API elimineert alle aspecten van een vaste functie volledig, waarbij ze worden vervangen door programmeerbare constructies en de interne implementatie aanzienlijk stroomlijnen. De honderden mogelijkheids-bits in eerdere versies van Direct3D zijn volledig verwijderd en vervangen door een goed gedefinieerde, inclusieve set functionaliteit met slechts enkele optionele gebruiksscenario's voor specifieke resourceindelingen. Het maken en valideren van cpu-intensieve resources heeft nu expliciete semantiek in de nieuwe API. Dit maakt veel voorspelbaarer prestatiegedrag mogelijk en vermindert de overhead per trek aanzienlijk. Resources kunnen opnieuw worden geconfigureerd in meerdere formulieren om efficiënt gebruik in verschillende fasen mogelijk te maken en de functieset legt veel minder beperkingen op voor gebruiksscenario's voor indelingen. Er zijn ook nieuwe patroonindelingen voor normale kaarten die zijn gecomprimeerd met blokken.

In de nieuwe API zijn arceringsconstanten en apparaatstatus expliciete resources, waardoor veel efficiëntere caching op de hardware mogelijk is en de validatie van stuurprogramma's aanzienlijk is vereenvoudigd. Het programmeerbare shadermodel is geïntegreerd in zowel hoekpunt- als pixel-shaders, en is expressief gemaakt met een goed gedefinieerd rekenmodel en een operatorset. Er is ook een nieuwe geometrie-shader-fase toegevoegd om te werken op primitieven na de schaduwfase van het hoekpunt. De resultaten van het werk van de GPU in de hoekpunt- en geometrie-shaderfasen van de pijplijn kunnen worden gestreamd naar video-RAM voor hergebruik, waardoor de mogelijkheid van extreem complexe GPU-bewerkingen met meerdere pass-GPU-bewerkingen met minimale CPU-interactie mogelijk is.

Al deze verbeteringen maken grafische technologie van de volgende generatie mogelijk en breiden de mogelijkheid van toepassingen uit om werk buiten de GPU uit te voeren. Offloading maakt complexere op GPU gebaseerde skinning van tekens mogelijk, versnelde morphingtechnieken, het genereren van schaduwvolumes en extrusie, deeltjes- en fysicasystemen die volledig op GPU's zijn gebaseerd, complexere materialen gecombineerd tot efficiënte grote batches, procedurele details, realtime ray-traced verplaatsingstoewijzing, generatie van single-pass kubuskaart en nog veel meer technieken, allemaal terwijl CPU-resources worden vrijgemaakt voor complexere toepassingen.

Om dit innovatieniveau in Direct3D 10 te bieden, kunnen oudere hardware niet worden uitgedrukt als gedeeltelijke implementatie van een nieuwe interface. Een videokaart kan alle nieuwe functies ondersteunen of is geen Direct3D 10-compatibele kaart. Daarom kan Direct3D 9 DirectX7-hardware met veel ontbrekende functionaliteits- en gebruiksbeperkingen aansturen, direct3D 10 werkt alleen op een nieuwe generatie videokaarten. Voor een toepassing ter ondersteuning van oudere videohardware moet deze ook ondersteuning bieden voor de Direct3D 9-interfaces. Toekomstige versies van Direct3D bouwen voort op versie 10 en breiden deze uit naar nieuwe versies van de API en zorgen voor een strikte superset van Direct3D 10-functionaliteit.

Zie Direct3D 10voor meer informatie over Direct3D 10.

Direct3D 10.1

Windows Vista Service Pack 1 breidt de Direct3D 10-API uit met Direct3D 10.1, waarmee optionele interfaces en een extra shadermodel worden toegevoegd ter ondersteuning van nieuwe hardwarefuncties van videokaarten die Direct3D 10.1 ondersteunen. Alle hardware die Direct3D 10.1 ondersteunt, ondersteunt ook alle functies van Direct3D 10 volledig en gameontwikkelaars kunnen gebruikmaken van de extra functies van Direct3D 10.1, indien beschikbaar.

Notitie

Direct3D 10.1 is de grafische API die wordt gebruikt door het Windows 7-bureaublad.

 

Notitie

Windows 7 en de Windows Vista-update voegen ondersteuning toe voor DXGI 1.1, 10level9-functieniveaus en het WARP10-apparaat aan de bestaande Direct3D 10.1-API.

 

Direct3D 11

Windows 7 ondersteunt een nieuwe revisie van Direct3D, Direct3D 11, gebouwd op het ontwerp van direct3D 10.1 API. Nieuwe functies van de API omvatten multithreaded rendering en het maken van resources, Compute Shader, ondersteuning voor 10level9-functieniveaus en het WARP10-softwarerenderingsapparaat, en nieuwe Hardwarefuncties van direct3D 11-klasse, zoals tessellation met romp-& domein-shaders, compressie-indelingen BC6H en BC7-patronen, Shader Model 5.0 en Dynamic Shader Linkage. De nieuwe API kan gebruikmaken van bestaande Direct3D 10- en 10.1-klassevideokaarten, sommige Direct3D 9-kaarten via de functieniveaus 10level9 met beperkte functieondersteuning en de nieuwste generatie Videokaarten van direct3D 11.

Naast de Direct3D 11 API bevat Windows 7 DXGI 1.1, Direct2D, DirectWrite en ondersteuning voor WDDM 1.1-stuurprogramma's.

Notitie

De Direct3D 11 en gerelateerde API's zijn ook beschikbaar als update voor Windows Vista (zie De nieuwste versie van DirectXinstalleren).

 

Direct3D 11.1

Windows 8 breidt de Direct3D 11 API- uit met Direct3D 11.1. Direct3D 11.1 ondersteunt alle bestaande hardware die functieniveaus 11, 10_x en 9_x ondersteuning, evenals een nieuw 11_1-functieniveau.

Naast de Direct3D 11.1 API-bevat Windows 8 DXGI 1.2, Direct2D-apparaatcontextenen ondersteuning voor WDDM 1.2-stuurprogramma's.

Notitie

Als u wilt dat uw Windows Store-apps 3D-afbeeldingen programmeren met DirectX, kunt u de Direct3D 11.1 API gebruiken. Zie Inleiding tot 3D-afbeeldingen met DirectXvoor meer informatie over het programmeren van 3D-afbeeldingen met DirectX-afbeeldingen.

 

Platformupdate voor Windows 7: gedeeltelijke ondersteuning is beschikbaar voor de Direct3D 11.1 API- op Windows 7 of Windows Server 2008 R2 met de Platform Update voor Windows 7 geïnstalleerd. Zie Platform Update voor Windows 7voor meer informatie over de platformupdate voor Windows 7.

OpenGL

Windows Vista, Windows 7 en Windows 8 bieden dezelfde ondersteuning als Windows XP voor OpenGL, waarmee videokaartproducties een installeerbaar clientstuurprogramma (ICD) kunnen bieden voor OpenGL dat hardware-versnelde ondersteuning biedt. Houd er rekening mee dat nieuwere versies van dergelijke ICD's vereist zijn om Windows Vista of Windows 7 of Windows 8 volledig te ondersteunen. Als er geen ICD is geïnstalleerd, valt het systeem in de meeste gevallen terug op de OpenGL v1.1-softwarelaag.

Toepassingscompatibiliteit, GDI en oudere versies van Direct3D

De grafische systemen van Windows Vista, Windows 7 en Windows 8 zijn ontworpen ter ondersteuning van een breed scala aan hardware- en gebruiksscenario's om nieuwe technologie mogelijk te maken terwijl bestaande systemen blijven ondersteunen. Bestaande grafische interfaces, zoals GDI, GDI+en oudere versies van Direct3D, blijven werken op Windows Vista en Windows 7, maar worden waar mogelijk intern opnieuw toegewezen. Dit betekent dat het merendeel van de bestaande Windows-toepassingen blijft werken.

Windows Vista, Windows 7 en Windows 8 blijven dezelfde Direct3D- en DirectDraw-interfaces ondersteunen als Windows XP, terug naar versie 3 van DirectX (met uitzondering van de behouden modus van Direct3D, die is verwijderd). Net als bij Windows XP Professional x64 Edition zijn 64-bits systeemeigen toepassingen op nieuwere versies van Windows beperkt tot Direct3D9-, DirectDraw7- of nieuwere interfaces. Toepassingen met hoge prestaties moeten direct3D 9 of hoger gebruiken om ervoor te zorgen dat ze het dichtst bij de hardwaremogelijkheden passen.

Aanbevelingen

Houd rekening met de volgende aanbevelingen bij het selecteren van een API voor uw grafische toepassing:

  • Gebruik Direct3D 9 als uw toepassing Windows XP of een eerdere versie van Windows moet ondersteunen.
  • Gebruik Direct3D 9 als u Windows Vista of Windows 7 wilt ondersteunen die wordt uitgevoerd met XPDM-stuurprogramma's. Voor Windows Vista- of Windows 7-systemen die geen Direct3D 10- of betere videohardware hebben, kunt u ervoor kiezen om het bestaande codepad van Windows XP Direct3D 9 te gebruiken of de functieniveaus 10level9 te gebruiken via de Direct3D 10.1- of Direct3D 11-API.
  • Gebruik Direct3D 11 om te profiteren van de volgende generatie videohardware op Windows Vista, Windows 7 en Windows 8. Windows Store-apps moeten Direct3D 11 of hoger gebruiken.