Direct3D

Aus testwiki
Version vom 29. September 2024, 18:41 Uhr von imported>XZFF
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
Pipeline

Direct3D (oft mit D3D abgekürzt) ist eine Programmierschnittstelle (API) von Microsoft für 3D-Computergrafik. Direct3D ist ein Bestandteil von DirectX. Das 1992 von Servan Keondjian gegründete Unternehmen RenderMorphic wurde im Jahre 1995 von Microsoft gekauft, um dessen 3D-API Reality Labs zu Direct3D weiterzuentwickeln und 1996 in DirectX 2.0 zu integrieren. Keondjian leitete die Arbeiten und Doug Rabson agierte als Chefentwickler des Microsoft-Teams, das die 3D-API für Windows 95 entwickelte. Nach der Fertigstellung verließen Keondjian und Rabson das Unternehmen.

Direct3D dient dazu, Windows-Anwendungen einen möglichst direkten Zugriff auf die Hardware eines Computers zu geben. Häufig verwendet wird Direct3D vor allem für Computerspiele, bei dem es mit dem plattform- und betriebssystemunabhängigen OpenGL konkurriert. Direct3D verwendet anders als OpenGL ein linkshändiges Koordinatensystem.

Die lange Zeit eigenständige Programmierschnittstelle DirectDraw zur Programmierung von 2D-Computergrafik wurde mit DirectX 8.0 in Direct3D integriert.

Für die Grafikausgabe existiert in Windows neben Direct3D auch das Graphics Device Interface (GDI). Das GDI stellt eine abstrahierte Programmierschnittstelle zur Verfügung, bei der es für den Programmierer etwa wenig Unterschied macht, ob auf einen Bildschirm oder auf einen Drucker gezeichnet wird. Diese Abstraktion macht die Ausgabe selbst allerdings deutlich langsamer, unter anderem deshalb, weil das GDI komplexe Zeichenbefehle aus Grundoperationen nachbilden muss. Im Gegensatz zu Direct3D kommt das GDI daher vorrangig zur Darstellung gewöhnlicher Desktopapplikationen zum Einsatz, die nicht allzu grafik-intensiv sind. Mittlerweile existieren auch weitere Grafikschnittstellen in Windows, wie z. B. GDI+ oder Direct2D.

Mit Direct3D können Anwendungen dagegen an GDI vorbei direkt auf die Hardware zugreifen. Wenn ein Gerät einen komplexeren Befehl nicht unterstützt, so gibt Direct3D lediglich eine Fehlermeldung zurück. Es ist dann Aufgabe der Anwendung, auf diese Fehlermeldung adäquat zu reagieren – etwa durch Nachbildung des Befehls aus Grundoperationen, durch weniger detailgetreue Darstellung oder durch eine Fehlermeldung an den Anwender.

Verschiedene Grafikkarten unterstützen Direct3D durch Gerätetreiber, welche die standardisierten API-Befehle von Direct3D auf die Grafikhardware abbilden. Dabei unterscheidet Direct3D zwischen initialisierenden und ausführenden Befehlen. Initialisierende Befehle konvertieren komplexere Datenstrukturen – wie etwa Texturen – in das grafikkarten-spezifische Format, ausführende Befehle zeigen die derart konvertierten Elemente an. Da das Initialisieren und Konvertieren von Elementen einige Zeit in Anspruch nehmen kann, ist es bei Spielen üblich, dies während des Ladens eines neuen Levels zu tun. Ausführende Befehle sind dagegen auf größtmögliche Geschwindigkeit optimiert.

Moderne Grafikkarten stellen so genannte Hardware-Shader zur Verfügung. Diese Shader sind ausführbare Mini-Programme, welche zum Erzeugen von 3D-Effekten benutzt werden. Für die Programmierung der Shader definierte Microsoft eine eigene Maschinensprache, die von den beiden derzeit führenden Produzenten von Grafikchips, NVIDIA und AMD in ihren Chips überwiegend direkt unterstützt werden. Heutzutage werden aber vorwiegend Hochsprachen wie HLSL oder GLSL zur Shader-Programmierung genutzt. Direct3D erlaubt es, die verfügbaren Shader-Typen (Vertex-Shader, Pixel-Shader und Geometry-Shader) anzusteuern.

Vorlage:Veraltet

Unterstützte Plattformen

Die ersten Versionen von Direct3D wurden für Windows 95 entwickelt. Die derzeit aktuelle Windows-Version von Direct3D ist Version 12.x, diese wird jedoch genauso wie Direct3D 10 nur in Windows Vista und Windows 7, sowie zusätzlich Windows 8 in neueren Unterversionen unterstützt. Die weiterhin verfügbare Version 9.0c unterstützt sowohl die Nachfolger von Windows 95 als auch – mit Windows XP – die NT-Linie.

Die von Microsoft produzierten Spielkonsolen Xbox und Xbox 360 werden ebenfalls mit Varianten von Direct3D programmiert. Neben diesen beiden von Microsoft offiziell unterstützten Plattformen existieren mit Cedega und Wine zwei Implementierungen des Direct3D-APIs für Linux. Auch die Sega Dreamcast war kompatibel zu Direct3D.

Feature levels

Mit Direct3D 10.1 wurde das Konzept der Vorlage:Lang eingeführt.[1][2]

9.1 9.2 9.3 10.0 10.1 11.0 11.1 12.0 12.1
Shader-Modell 2.0 2.0 4.0 (4.0_level_9_3) 4.0 4.x 5.0 5.0 5.1 5.1
Geometry Shader Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Stream Out Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
DirectCompute / Compute-Shader Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Hull Shader Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Domain Shader Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Tiled Resources Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Tier2 Tier2
Conservative Rasterization Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Tier1
Rasterizer Order Views Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld
Min/Max Filters Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld
Map Default Buffer Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld
Texture Resource Array Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Cubemap Resoure Arrays Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
BC4/BC5-Kompression Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
BC6H/BC7 Kompression Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Alpha to Coverage Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Erweiterte Formate Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
10-bit pro Farbkanal Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Logische Operationen (Output Merger) Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Rasterisierung unabhängig vom Target Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Multiple Render Target (MRT) mit ForcedSampleCount 1 Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Unordered Access View (UAV)-Slots - - - 1 1 8 64 64 64
UAV in jeder Stage Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
max. ForcedSampleCount beim nur-UAV-Rendern - - - - - 8 16 16 16
Constant Buffer Offsets und teilweise Aktualisierungen Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Formate mit 16 Bit pro Pixel Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Teilweise-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
max. Texturgröße 2048 2048 4096 8192 8192 16384 16384 16384 16384
max. Cubemapgröße 512 512 4096 8192 8192 16384 16384 16384 16384
max. Volumenausbreitung 256 256 256 2048 2048 2048 2048 2048 2048
max. Texturwiederholungen 128 2048 8192 8192 8192 16384 16384 16384 16384
max. Anisotropie 2 16 16 16 16 16 16 16 16
max. Anzahl Primitive 2161 2201 2201 2321 2321 2321 2321 2321 2321
max. Input Slots 16 16 16 16 32 32 32 32 32
Render Targets simultan 1 1 4 8 8 8 8 8 8
Occlusion Queries Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Separater Alpha-Blend Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Mirror Once Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Überlappende Vertex-Elemente Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Unabhängige Write Masks Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Instancing Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Texturen, die kein Vielfaches von 2 darstellen Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
Constant Buffer Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Nein-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld Vorlage:Ja-Feld
max. Anzahl Constant Buffer je Shader - - - 15 15 15 15 15 15
max. Anzahl Konstanten im Constant Buffer - - - 4096 4096 4096 4096 4096 4096
Index-Buffer Formate 16-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit 16-bit, 32-bit

Siehe auch

Literatur

  • Uli Theuerjahr: Direct3D Real Time Rendering für Computerspiele. DirectX-Programmierung in C++. Roulio Press, Schönberg 2007, ISBN 978-3-00-022340-2.

Einzelnachweise