Grafik-APIs in Windows
Windows Vista bietet Unterstützung für ein völlig neues Anzeigetreibermodell, das eine wichtige Überarbeitung des Designs von Videotreibern seit der Einführung des Windows-Treibermodells (WDM) für Windows 98 darstellt. Dieses überarbeitete Modell spiegelt die Entwicklung der Videohardware aus der Welt der 2D-Rastervorgänge und GDI-Anwendungen auf die von 3D-Spielen mit Hardware fester Funktion und schließlich zur Entwicklung der modernen programmierbaren Grafikverarbeitungseinheit (GPU) wider, die eine breite Palette von hochleistungsfähigen Grafikanwendungen unterstützt. Windows 7 und Windows 8 bauen auf der Windows Vista-Grafikinfrastruktur auf, indem zusätzliche Grafik-Features und APIs bereitgestellt werden. In diesem Artikel werden Windows-Grafik-Features und -APIs erläutert.
- Hintergrund
- Direct3D 9
- Direct3D 9Ex
- Direct3D 10
- Direct3D 10.1
- Direct3D 11
- Direct3D 11.1
- OpenGL
- Anwendungskompatibilität, GDI und ältere Versionen von Direct3D
- Empfehlungen
Hintergrund
Die primäre API für die Programmierung von Grafiken seit den frühen Tagen von Windows ist die grafische Geräteschnittstelle (Graphic Device Interface, GDI). Diese API wurde entwickelt, um zahlreiche 2D-Ausgabegeräte zu verarbeiten 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 für die vorhandene Hardware der Zeit zu unterstützen. Interaktionen mit GDI waren kompliziert. Die effektive Mischung traditioneller GDI-Elemente mit Direct3D-Elementen wurde durch dieses Design begrenzt. Die Windows XP-Version von WDM, die als XPDM bezeichnet wird, spiegelt den parallelen Charakter von GDI und Direct3D wider (siehe Abbildung 1).
Abbildung 1. Grafik-APIs in Windows XP
Im Laufe der Jahre ist die Leistungsfähigkeit von 3D-Grafikkarten dramatisch an den Punkt gewachsen, an dem die überwiegende Mehrheit der Hardware dieser Funktion gewidmet ist. Ein neues Treibermodell, das Windows Display Driver Model (WDDM), bringt die GPU und Direct3D in den Vordergrund und ermöglicht die Erstellung einer völlig neuen Oberfläche, dem 3D-Desktop, der die 2D-Welt von GDI nahtlos mit der Leistungsfähigkeit moderner programmierbarer GPUs verbindet. Mit 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
Weitere Informationen zu WDDM finden Sie im Leitfaden für Windows Vista-Anzeigetreibermodelle (WDDM).
Direct3D 9
Version 9 von DirectX wurde 2002 erstmals für Windows mit nachfolgenden Updates im Jahr 2003 und 2004 veröffentlicht. Diese API stellt ein Jahrzehnt der Entwicklung der DirectX-Technologien, die Einführung leistungsstarker Shader-Programmierungsmodelle 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-Versionen ausgeführt werden müssen. Die Details des neuen Treibermodells werden von Anwendungen mit den Direct3D 9-Schnittstellen ausgeblendet, aber hinter den Kulissen nutzt das Betriebssystem die neuen Funktionen vollständig, um echte Multitasking der GPU, effizientere Ressourcenverwaltung und robustere Leistung zu bieten.
Um die vollständige Kompatibilität mit älteren Versionen von Windows sicherzustellen, müssen einige Eigenheiten des alten Treibermodells auch mit dem neuen Windows Vista-Anzeigetreibermodell emuliert werden. Wenn beispielsweise eine Vollbildanwendung den Fokus verliert, muss davon ausgegangen werden, dass alle Ressourcen im Videospeicher (VRAM) verloren gegangen sind, und diese, die sie als nicht verwaltete Ressourcen erstellt haben, neu laden, auch wenn das neue Treibermodell die Ressourcen transparent verarbeitet, ohne sie aus dem Gerätekontext zu entfernen. Selbst das Konzept eines verwalteten vs. Standardressourcentyps ist für das alte Treibermodell spezifisch. Ein weiteres Beispiel ist die Erwartung eines Fehlers, wenn nicht verwaltete Ressourcen (Standardpool) über die verfügbare Menge an VRAM verteilt werden, auch wenn das neue Treibermodell einen nahezu unbegrenzten virtuellen 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 verwenden.
Während neue Systeme im Lieferumfang von Windows Vista Grafikkarten mit WDDM-Treibern enthalten und neue Treiber für eine Reihe beliebter Grafikkarten in der Box enthalten sind, 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 ist dem von Windows XP (Abbildung 1) sehr ähnlich. 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 leichte Erweiterung der Direct3D 9-Standard-API, die die virtualisierte Ressourcenzuordnung, neue verlorene Gerätesemantik und einige andere neue Features verfügbar macht, während sie unter Windows Vista ausgeführt werden. Durch das Erstellen dieses erweiterten Objekts verwendet die Direct3D 9-API die neue Semantik und erfordert daher, dass die Anwendung unterschiedliche Logik (und daher unterschiedliche Codepfade) für die Erstellung, 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 für vorhandene Direct3D-Anwendungen aufrechtzuerhalten. Die neuen 3D-Desktopanwendungen und viele Windows Vista-spezifische Anwendungen nutzen diese Version von Direct3D 9, funktionieren jedoch nicht, wenn sie auf älteren XPDM-Treibern ausgeführt werden. Da die Direct3D 9Ex-API in älteren Versionen von Windows aufgrund fehlender Unterstützung für WDDM nie angezeigt wird, decken die Standardmäßigen Direct3D 9-Schnittstellen eine viel breitere Gruppe von Systemen ab. Für hochleistungsfähige Anwendungen, die die nächste 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. Weitere Informationen zu Direct3D 9Ex finden Sie unter DirectX für Windows Vista.
Direct3D 10
Um das Potenzial des neuen Windows Vista-Treibermodells und der Hardware der nächsten Generation vollständig zu erkennen, wurde eine völlig neue Version der Direct3D-API erstellt. Während WDDM einige der Leistungsbeschränkungen im vorhandenen Grafiksystem beseitigt, geht Direct3D 10 weiter, indem Entwurfsengpässe in der vorhandenen Direct3D-API entfernt werden und die Programmierung der GPU erheblich vereinfacht wird.
Die neue API beseitigt vollständig alle, aber einige Aspekte mit fester Funktion, ersetzt sie durch programmierbare Konstrukte und optimiert die interne Implementierung erheblich. Die Hunderte von Funktionsbits in früheren Versionen von Direct3D wurden vollständig eliminiert und durch einen gut definierten, inklusiven Satz von Funktionen ersetzt, der nur wenige optionale Verwendungsszenarien für bestimmte Ressourcenformate enthält. CPU-intensive Ressourcenerstellung und -validierung verfügen jetzt über explizite Semantik in der neuen API. Dies ermöglicht viel vorhersagbares Leistungsverhalten und verringert den Aufwand pro Draw erheblich. Ressourcen können in mehrere Formulare umkonfiguriert werden, um eine effiziente Verwendung in verschiedenen Phasen zu ermöglichen, und der Funktionssatz legt weit weniger Einschränkungen für Nutzungsszenarien für Formate fest. Es gibt auch neue blockkomprimierte Normalzuordnungstextformate.
In der neuen API sind Shaderkonstanten und Gerätestatus explizite Ressourcen, sodass eine wesentlich effizientere Zwischenspeicherung auf der Hardware und eine deutlich vereinfachte Treiberüberprüfung möglich ist. Das programmierbare Shader-Modell wurde sowohl über Vertex- als auch Pixel-Shader hinweg vereinheitlicht und mit einem gut definierten Berechnungsmodell und Operatorsatz ausdrucksstärker gestaltet. Außerdem wurde eine neue Geometrie-Shader-Stufe hinzugefügt, um nach der Vertex-Shader-Phase auf Grundtypen zu arbeiten. Die Ergebnisse der GPU-Arbeit in den Vertex- und Geometrie-Shader-Phasen der Pipeline können für die Wiederverwendung an den Video-RAM gestreamt werden, sodass die Möglichkeit extrem komplexer GPU-Vorgänge mit minimaler CPU-Interaktion möglich ist.
All diese Verbesserungen ermöglichen die Grafiktechnologie der nächsten Generation und erweitern die Fähigkeit von Anwendungen, die Arbeit auf die GPU zu deaktivieren. Offloading ermöglicht komplexeres GPU-basiertes Charakter-Skinning, beschleunigte Morphing-Techniken, Schattenvolumengenerierung und Extrusion, Partikel- und Physiksysteme, die vollständig GPU-basierte, komplexere Materialien kombiniert in effiziente großgezeichnete Batches, verfahrenstechnische Detaillierung, Echtzeit-Ray-Traced-Verdrängungszuordnung, Single-Pass Cube-Map-Generation und viele weitere Techniken – alles, während CPU-Ressourcen für komplexere Anwendungen freigegeben werden.
Um dieses Maß an Innovationen in Direct3D 10 bereitzustellen, kann ältere Hardware nicht als partielle Implementierung einer neuen Schnittstelle ausgedrückt werden. Eine Grafikkarte kann entweder alle neuen Features unterstützen, oder es handelt sich nicht um eine Direct3D 10-fähige Karte. Während Direct3D 9 die DirectX7-Hardware mit vielen fehlenden Funktionsbits und Nutzungseinschränkungen steuern konnte, 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 auf neue Versionen der API erweitern und gleichzeitig eine strenge Obermenge 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 mit Direct3D 10.1, die optionale Schnittstellen und ein zusätzliches Shader-Modell hinzufügt, um neue Hardware-Features von Grafikkarten zu unterstützen, die Direct3D 10.1 unterstützen. Alle Hardware, die Direct3D 10.1 unterstützt, unterstützt auch alle Features von Direct3D 10 vollständig, und Spieleentwickler können die zusätzlichen Features von Direct3D 10.1 nutzen, wenn 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 Unterstützung für DXGI 1.1, 10level9-Feature-Ebenen und das WARP10-Gerät zur vorhandenen Direct3D 10.1-API hinzu.
Direct3D 11
Windows 7 unterstützt eine neue Revision von Direct3D, Direct3D 11, die auf dem Design der Direct3D 10.1-API basiert. Zu den neuen Features der API gehören Multithread-Rendering und Ressourcenerstellung, Compute-Shader, Unterstützung für Feature-Ebenen mit 10level9 und das WARP10-Software-Rendering-Gerät sowie neue Hardware-Features der Direct3D 11-Klasse, z. B. Tessellation mit Hull- & Domänen-Shadern, BC6H- und BC7-Texturkomprimierungsformate, Shader-Modell 5.0 und Dynamische Shader-Verknüpfung. Die neue API kann vorhandene Direct3D 10- und 10.1-Klassen-Grafikkarten, einige Direct3D 9-Karten über die 10level9-Feature-Ebenen mit eingeschränkter Featureunterstützung und die Direct3D 11-Klassen-Grafikkarten der neuesten Generation 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
Die Direct3D 11- und zugehörigen 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 mit Direct3D 11.1. Direct3D 11.1 unterstützt alle vorhandenen Hardware, die Feature-Ebenen 11, 10_x und 9_x unterstützt, sowie eine neue Feature-Ebene von 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 in der 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 verfügbar, wobei das Plattformupdate für Windows 7 installiert ist. 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 Videokartenhersteller einen installierbaren Clienttreiber (ICD) für OpenGL bereitstellen können, der hardwarebeschleunigte Unterstützung bietet. Beachten Sie, dass neuere Versionen solcher ICDs erforderlich sind, um Windows Vista oder Windows 7 oder Windows 8 vollständig zu unterstützen. Wenn kein ICD installiert ist, fällt das System in den meisten Fällen auf die OpenGL v1.1-Software-Ebene zurück.
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 Mehrzahl der vorhandenen Windows-Anwendungen weiterhin funktioniert.
Windows Vista, Windows 7 und Windows 8 unterstützen weiterhin die gleichen Direct3D- und DirectDraw-Schnittstellen wie Windows XP, zurück zur 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 in neueren Versionen von Windows auf Direct3D9, DirectDraw7 oder neuere Schnittstellen beschränkt. Hochleistungsanwendungen sollten Direct3D 9 oder höher verwenden, um sicherzustellen, dass sie den Hardwarefunktionen am ehesten entsprechen.
Empfehlungen
Beachten Sie beim Auswählen einer API für Ihre grafische Anwendung die folgenden Empfehlungen:
- 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 ohne Direct3D 10 oder eine bessere Videohardware können Sie entweder den vorhandenen Windows XP Direct3D 9-Codepfad verwenden oder die Feature-Ebenen 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.