Share via


Grafik-APIs in Windows

Windows Vista unterstützt ein völlig neues Anzeigetreibermodell, das seit der Einführung des Windows-Treibermodells (WDM) für Windows 98 eine wichtige Überarbeitung im Design von Videotreibern darstellt. Dieses neu gestaltete Modell spiegelt die Entwicklung der Videohardware von der Welt der 2D-Rastervorgänge und GDI-Anwendungen zu 3D-Spielen mit Grafikhardware mit festen Funktionen und schließlich der modernen programmierbaren Grafikverarbeitungseinheit (GPU) wider, die eine breite Palette von hochleistungsfähigen Grafikanwendungen unterstützt. Windows 7 und Windows 8 auf der Windows Vista-Grafikinfrastruktur aufbauen, indem sie zusätzliche Grafikfeatures und APIs bereitstellen. In diesem Artikel werden Windows-Grafikfeatures und -APIs erläutert.

Hintergrund

Die primäre API zum Programmieren von Grafiken seit den frühen Tagen von Windows ist die Grafische Geräteschnittstelle (GDI). Diese API wurde für die Verarbeitung zahlreicher 2D-Ausgabegeräte entwickelt und bildete die Grundlage für die Windows-Benutzeroberfläche. DirectDraw und Direct3D wurden als alternative APIs eingeführt, um Vollbildspiele und 3D-Rendering als Erweiterungen der vorhandenen Hardware zu unterstützen. Interaktionen mit GDI waren kompliziert. Die effektive Vermischung herkömmlicher GDI-Elemente mit Direct3D-Elementen wurde durch diesen Entwurf eingeschränkt. Die Windows XP-Version von WDM, bekannt als XPDM, spiegelt die parallele Natur von GDI und Direct3D wider (siehe Abbildung 1).

Abbildung 1. Grafik-APIs in Windows XP

Xpdm

Im Laufe der Jahre ist die Leistungsfähigkeit von 3D-Grafikkarten dramatisch gewachsen, bis zu dem Punkt, an dem die überwiegende Mehrheit der Hardware für diese Funktion gewidmet ist. Ein neues Treibermodell, Windows Display Driver Model (WDDM), bringt die GPU und Direct3D in den Vordergrund und ermöglicht die Erstellung einer völlig neuen Oberfläche, des 3D-Desktops, die die 2D-Welt von GDI nahtlos mit der Leistungsfähigkeit moderner programmierbarer GPUs verbindet. Bei WDDM wird die Videohardware vollständig von Direct3D gesteuert, und alle anderen Grafikschnittstellen kommunizieren mit der Videohardware über das neue Direct3D-zentrierte Treibermodell (siehe Abbildung 2).

Abbildung 2. Grafik-APIs in Windows Vista

Wddm

Weitere Informationen zum WDDM finden Sie unter Windows Vista Display Driver Model (WDDM)-Entwurfshandbuch auf MSDN.

Direct3D 9

Version 9 von DirectX wurde erstmals 2002 für Windows veröffentlicht, mit nachfolgenden Updates in den Jahren 2003 und 2004. Diese API stellt ein Jahrzehnt der Entwicklung der DirectX-Technologien, die Einführung leistungsfähigerer Shaderprogrammiermodelle für Direct3D und eine Reife dar, die von Tausenden von Versandtiteln unterstützt wird. Direct3D 9 ist die primäre Grafikschnittstelle unter Windows Vista. Es bleibt die ideale API zum Schreiben von 3D-Spielen und -Anwendungen, die auf der breiten Palette vorhandener Hardware- und Windows-Releases ausgeführt werden müssen. Die Details des neuen Treibermodells sind Anwendungen mit den Direct3D 9-Schnittstellen verborgen, aber hinter den Kulissen nutzt das Betriebssystem die neuen Funktionen voll aus, um echtes Multitasking der GPU, effizientere Ressourcenverwaltung und robuste Leistung zu bieten.

Um die vollständige Kompatibilität mit älteren Versionen von Windows zu gewährleisten, müssen einige Macken des alten Treibermodells auch mit dem neuen Windows Vista-Anzeigetreibermodell emuliert werden. Wenn beispielsweise eine Vollbildanwendung den Fokus verliert, muss sie davon ausgehen, dass sie alle Ressourcen im Videospeicher (VRAM) verloren hat und die erstellten Ressourcen als nicht verwaltete Ressourcen neu laden, obwohl das neue Treibermodell die Ressourcen transparent verarbeitet, ohne sie aus dem Gerätekontext zu entfernen. Auch das Konzept eines verwalteten Ressourcentyps im Vergleich zu einem Standardressourcentyp ist spezifisch für das alte Treibermodell. Ein weiteres Beispiel ist die Erwartung eines Ausfalls bei der Zuweisung nicht verwalteter Ressourcen (Standardpool), die über die verfügbare VRAM-Menge hinausgehen, obwohl das neue Treibermodell eine nahezu unbegrenzte Menge an virtuellem Videospeicher bereitstellen kann. Aufgrund dieser Anforderungen erhalten Direct3D-Anwendungen, die unter Windows Vista ausgeführt werden, weiterhin diese Fehlerbedingungen. Daher sind sie in ihrer Fähigkeit eingeschränkt, die grundlegenden Direct3D 9-Schnittstellen zu verwenden, um einige Features des neuen Treibermodells vollständig zu nutzen.

Während neue Systeme, die mit Windows Vista bereitgestellt werden, Grafikkarten mit WDDM-Treibern enthalten werden, und neue Treiber für eine Reihe beliebter Grafikkarten sind im Lieferumfang enthalten, unterstützt Windows Vista weiterhin die Möglichkeit, ältere XPDM-Treiber für Upgrades und Unternehmenseditionen zu verwenden. Auf Systemen, die das alte Treibermodell verwenden, müssen Direct3D 9 und ältere Schnittstellen verwendet werden, und der Betrieb des Grafiksystems ähnelt sehr dem von Windows XP (Abbildung 1). WDDM ist erforderlich, damit Anwendungen Direct3D 9Ex, Direct3D 10 und höhere Versionen verwenden können.

Direct3D 9Ex

Die Direct3D 9Ex-Schnittstelle bietet Zugriff auf eine geringfügige Erweiterung der Direct3D 9-Standard-API, die die virtualisierte Ressourcenzuordnung, neue verlorene Gerätesemantik und einige andere neue Features verfügbar macht, die während der Ausführung unter Windows Vista verfügbar sind. Durch das Erstellen dieses erweiterten Objekts verwendet die Direct3D 9-API die neue Semantik und erfordert daher, dass die Anwendung unterschiedliche Logik (und damit unterschiedliche Codepfade) für die Ressourcenerstellung, -verwaltung und -fehlerbehandlung für neue Arten von Bedingungen verwendet. Diese API ist nur unter Windows Vista verfügbar und erfordert WDDM-Treiber. Da Direct3D 9Ex einen separaten API- und Treibercodepfad als Direct3D 9 verwendet, erfordert die Unterstützung dieser API zusätzliche Testfälle für Ihre Anwendung.

Der Hauptgrund für die Erstellung der neuen Direct3D 9Ex-API bestand darin, den vollständigen Zugriff auf die neuen Funktionen von WDDM zu ermöglichen und gleichzeitig die Kompatibilität mit vorhandenen Direct3D-Anwendungen zu gewährleisten. Der neue 3D-Desktop und viele Windows Vista-spezifische Anwendungen verwenden diese Version von Direct3D 9, aber sie sind nicht funktionsfähig, wenn sie mit älteren XPDM-Treibern ausgeführt werden. Da die Direct3D 9Ex-API in älteren Versionen von Windows aufgrund fehlender Unterstützung für das WDDM nie angezeigt wird, decken die Direct3D 9-Standardschnittstellen einen viel breiteren Satz von Systemen ab. Für hochleistungsfähige Anwendungen, die die Vorteile der nächsten Generation von Videohardware nutzen können, bietet die völlig neue Version 10 von Direct3D viele neue Funktionen, die von Direct3D 9Ex nicht verfügbar gemacht werden. Daher ist direct3D 9 oder Direct3D 10 für Spiele und die meisten anderen Anwendungen die empfohlene API.

Hinweis

Das DirectX SDK stellt keine Beispiele, Header oder Bibliotheken für die Direct3D 9Ex-Schnittstelle bereit. Die MSDN Library und das Windows SDK (früher als Platform SDK bezeichnet) enthalten die verfügbaren Dokumentationen, Header und Bibliotheken.

 

Weitere Informationen zu Direct3D 9Ex finden Sie unter DirectX für Windows Vista unter MDSN.

Direct3D 10

Um das Potenzial des neuen Windows Vista-Treibermodells und der Hardware der nächsten Generation voll auszuschöpfen, wurde eine völlig neue Version der Direct3D-API erstellt. Während WDDM einige Leistungseinschränkungen im vorhandenen Grafiksystem beseitigt, geht Direct3D 10 noch weiter, indem Entwurfsengpässe in der vorhandenen Direct3D-API beseitigt werden und die Programmierung der GPU erheblich vereinfacht wird.

Die neue API beseitigt bis auf einige wenige Aspekte mit festen Funktionen vollständig, ersetzt sie durch programmierbare Konstrukte und vereinfacht die interne Implementierung erheblich. Die Hunderte von Funktionsbits in früheren Versionen von Direct3D wurden vollständig entfernt und durch einen klar definierten, inklusiven Funktionsumfang ersetzt, der nur einige optionale Verwendungsszenarien für bestimmte Ressourcenformate enthält. Cpu-intensive Ressourcenerstellung und -validierung verfügen jetzt über eine explizite Semantik in der neuen API. Dies ermöglicht ein viel vorhersagbares Leistungsverhalten und einen erheblich geringeren Mehraufwand pro Zeichnung. Ressourcen können in mehrere Formulare neu konfiguriert werden, um eine effiziente Verwendung in verschiedenen Phasen zu ermöglichen, und der Featuresatz erzwingt weitaus weniger Einschränkungen für Verwendungsszenarien für Formate. Es gibt auch neue blockkomprimierte Normalzuordnungstexturformate.

In der neuen API sind Shaderkonstanten und der Gerätestatus explizite Ressourcen, die eine weitaus effizientere Zwischenspeicherung auf der Hardware und eine stark vereinfachte Treiberüberprüfung ermöglichen. Das programmierbare Shadermodell wurde sowohl für Vertex- als auch für Pixel-Shader vereinheitlicht und durch ein klar definiertes Berechnungsmodell und einen Operatorsatz ausdrucksstärker gestaltet. Außerdem wurde eine neue Geometrie-Shaderstufe hinzugefügt, um nach der Vertex-Shaderphase mit Primitiven zu arbeiten. Die Ergebnisse der Arbeit der GPU in den Vertex- und Geometrie-Shaderphasen der Pipeline können zur Wiederverwendung in den Video-RAM gestreamt werden, was die Möglichkeit von extrem komplexen Multi-Pass-GPU-Vorgängen mit minimaler CPU-Interaktion ermöglicht.

All diese Verbesserungen ermöglichen die Grafiktechnologie der nächsten Generation und erweitern die Fähigkeit von Anwendungen, die Arbeit auf die GPU zu laden. Das Ausladen ermöglicht komplexere GPU-basierte Charakter-Skinnings, beschleunigte Morphing-Techniken, Schattenvolumengenerierung und -extrusion, Partikel- und Physiksysteme, die vollständig GPU-basierte, komplexere Materialien sind, die in effizienten Großserienbatches, prozeduralen Details, Echtzeit-Ray-Traced-Verschiebungszuordnungen, Single-Pass-Cube-Map-Generierung und viele weitere Techniken kombiniert sind, während CPU-Ressourcen für komplexere Anwendungen freigegeben werden.

Um dieses Maß an Innovation in Direct3D 10 zu ermöglichen, kann ältere Hardware nicht als teilweise Implementierung einer neuen Schnittstelle ausgedrückt werden. Ein Video Karte kann entweder alle neuen Features unterstützen, oder es ist kein Direct3D 10-fähiges Karte. Während Direct3D 9 also Hardware der DirectX7-Ära mit vielen fehlenden Funktionen und Nutzungseinschränkungen antreiben könnte, funktioniert Direct3D 10 nur auf einer neuen Generation von Grafikkarten. Damit eine Anwendung ältere Videohardware unterstützt, muss sie auch die Direct3D 9-Schnittstellen unterstützen. Zukünftige Versionen von Direct3D werden auf Version 10 aufbauen und sie auf neue Versionen der API erweitern und gleichzeitig eine strikte Übermenge der Direct3D 10-Funktionalität sicherstellen.

Weitere Informationen zu Direct3D 10 finden Sie unter Direct3D 10.

Direct3D 10.1

Windows Vista Service Pack 1 erweitert die Direct3D 10-API um Direct3D 10.1, wodurch optionale Schnittstellen und ein zusätzliches Shadermodell hinzugefügt werden, um neue Hardwarefeatures von Grafikkarten zu unterstützen, die Direct3D 10.1 unterstützen. Alle Hardware, die Direct3D 10.1 unterstützen kann, unterstützt auch alle Features von Direct3D 10 vollständig, und Spieleentwickler können die zusätzlichen Features von Direct3D 10.1 nutzen, sofern verfügbar.

Hinweis

Direct3D 10.1 ist die Grafik-API, die vom Windows 7-Desktop verwendet wird.

 

Hinweis

Windows 7 und das Windows Vista-Update fügen der vorhandenen Direct3D 10.1-API Unterstützung für DXGI 1.1, 10level9 und das WARP10-Gerät hinzu.

 

Direct3D 11

Windows 7 unterstützt eine neue Version von Direct3D, Direct3D 11, die auf dem Entwurf der Direct3D 10.1-API basiert. Zu den neuen Features der API gehören Multithread-Rendering und Ressourcenerstellung, Compute-Shader, Unterstützung für 10Level9-Featureebenen und das WarP10-Softwarerenderinggerät sowie neue Hardwarefeatures der Direct3D 11-Klasse, z. B. Tessellation mit Hull-Domänen-Shadern & , Bc6H- und BC7-Texturkomprimierungsformate, Shadermodell 5.0 und Dynamische Shaderverknüpfung. Die neue API kann vorhandene Direct3D 10- und 10.1-Klassen-Grafikkarten, einige Direct3D 9-Karten über die 10level9-Featureebenen mit eingeschränkter Featureunterstützung und die neueste Generation von Direct3D 11-Grafikkarten verwenden.

Zusätzlich zur Direct3D 11-API umfasst Windows 7 DXGI 1.1, Direct2D, DirectWrite und Unterstützung für WDDM 1.1-Treiber.

Hinweis

Direct3D 11 und zugehörige APIs sind auch als Update für Windows Vista verfügbar (siehe Installieren der neuesten Version von DirectX).

 

Direct3D 11.1

Windows 8 erweitert die Direct3D 11-API um Direct3D 11.1. Direct3D 11.1 unterstützt alle vorhandenen Hardware mit Unterstützung der Ebenen 11, 10_x und 9_x sowie eine neue Featureebene 11_1.

Zusätzlich zur Direct3D 11.1-API umfasst Windows 8 DXGI 1.2, Direct2D-Gerätekontexte und Unterstützung für WDDM 1.2-Treiber.

Hinweis

Wenn Ihre Windows Store-Apps 3D-Grafiken mit DirectX programmieren möchten, können Sie die Direct3D 11.1-API verwenden. Weitere Informationen zum Programmieren von 3D-Grafiken mit DirectX finden Sie unter Einführung in 3D-Grafiken mit DirectX.

 

Plattformupdate für Windows 7: Teilweiser Support ist für die Direct3D 11.1-API unter Windows 7 oder Windows Server 2008 R2 mit installiertem Plattformupdate für Windows 7 verfügbar. Weitere Informationen zum Plattformupdate für Windows 7 finden Sie unter Plattformupdate für Windows 7.

Opengl

Windows Vista, Windows 7 und Windows 8 bieten die gleiche Unterstützung wie Windows XP für OpenGL, wodurch Video Karte Herstellern die Bereitstellung eines installierbaren Clienttreibers (ICD) für OpenGL ermöglicht, der hardwarebeschleunigte Unterstützung bietet. Beachten Sie, dass neuere Versionen dieser ICDs erforderlich sind, um Windows Vista, Windows 7 oder Windows 8 vollständig zu unterstützen. Wenn kein ICD installiert ist, wird das System in den meisten Fällen auf die OpenGL v1.1-Softwareebene zurückfallen.

Anwendungskompatibilität, GDI und ältere Versionen von Direct3D

Die Grafiksysteme Windows Vista, Windows 7 und Windows 8 unterstützen eine breite Palette von Hardware- und Nutzungsszenarien, um neue Technologien zu ermöglichen und gleichzeitig vorhandene Systeme zu unterstützen. Vorhandene Grafikschnittstellen wie GDI, GDI+ und ältere Versionen von Direct3D funktionieren weiterhin unter Windows Vista und Windows 7, werden jedoch nach Möglichkeit intern neu zugeordnet. Dies bedeutet, dass die Mehrheit der vorhandenen Windows-Anwendungen weiterhin funktioniert.

Windows Vista, Windows 7 und Windows 8 weiterhin dieselben Direct3D- und DirectDraw-Schnittstellen wie Windows XP unterstützen, zurück zu Version 3 von DirectX (mit Ausnahme des beibehaltenen Modus von Direct3D, der entfernt wurde). Genau wie bei Windows XP Professional x64 Edition sind native 64-Bit-Anwendungen auf neueren Versionen von Windows auf Direct3D9-, DirectDraw7- oder neuere Schnittstellen beschränkt. Hochleistungsanwendungen sollten Direct3D 9 oder höher verwenden, um sicherzustellen, dass sie die nächstgelegene Übereinstimmung mit den Hardwarefunktionen haben.

Empfehlungen

Berücksichtigen Sie die folgenden Empfehlungen, wenn Sie eine API für Ihre grafische Anwendung auswählen:

  • Verwenden Sie Direct3D 9, wenn Ihre Anwendung Windows XP oder eine frühere Version von Windows unterstützen muss.
  • Verwenden Sie Direct3D 9, wenn Sie Windows Vista oder Windows 7 mit XPDM-Treibern unterstützen möchten. Für Windows Vista- oder Windows 7-Systeme, auf denen Direct3D 10 oder eine bessere Videohardware fehlt, können Sie entweder den vorhandenen Windows XP Direct3D 9-Codepfad verwenden oder die Featureebenen 10level9 über die Direct3D 10.1- oder Direct3D 11-API verwenden.
  • Verwenden Sie Direct3D 11, um die nächste Generation von Videohardware unter Windows Vista, Windows 7 und Windows 8 zu nutzen. Windows Store-Apps müssen Direct3D 11 oder höher verwenden.