DirectX

Sammlung COM-basierter Programmierschnittstellen
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. Juli 2006 um 18:47 Uhr durch 83.236.60.12 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

DirectX [daɪˌrɛktˈɛks] ist eine Sammlung von Application Programming Interfaces (APIs) für Multimediaprogramme (besonders Spiele) auf der Windows-Plattform und findet auch auf der Spielekonsole Xbox Verwendung.

DirectX wird vorrangig zur Darstellung komplexer 2D- und 3D-Grafik benutzt. Es bietet aber auch Unterstützung für Audio, diverse Eingabegeräte (z. B. Maus, Joystick) und Netzwerkkommunikation.

Die aktuelle Version ist DirectX 9.0c (Juni 2006 Build). Für Ende 2006 oder Anfang 2007 ist die Version DirectX 10.0 geplant.

Entwicklungs-Geschichte

Nachdem sich Ende der 80er / Anfang der 90er Jahre der IBM (kompatible) PC mit dem Betriebssystem MS-DOS als „Computer für Jedermann“ durchzusetzen begann, begann auch der Siegeszug für die grafische Oberfläche Windows (engl. GUI). Nach und nach wurden alle wichtigen Anwendungen auch für Windows bereitgestellt (portiert) und viele neue wurden exklusiv für Windows mithilfe der WinAPI entwickelt. Einzige Ausnahme blieben Computerspiele, die damals zwar vorwiegend auf den mit besseren Multimediafähigkeiten bestückten Heimcomputern erschienen, aber auch mehr und mehr auf dem PC Einzug hielten.

Windows bot zu diesem Zeitpunkt noch keine für schnelle Grafik- und Audio-Operationen (die für Spiele meist unabdingbar sind) optimierten Schnittstellen, und so wurden diese quasi ausschließlich für MS-DOS entwickelt. Dieses bot zwar auch keinerlei speziell für Spiele entworfenen Schnittstellen, aber es erlaubte die völlige Kontrolle über den Prozessor und kompletten Zugriff auf jedwede angeschlossene Hardware. Vor allem konnte ein Programm unter MS-DOS sicher sein – im Gegensatz zu dem Multithreading-System Windows – alleine zu laufen und nicht mit „gleichzeitig“ laufenden Programmen zu interferieren. Microsoft schenkte der Entertainment-Branche und Unterhaltungsmedien wie Computerspielen abseits von Solitär zu diesem Zeitpunkt noch wenig Beachtung.

Nach dem einschlagenden Erfolg des Computerspiels Doom von id software, die schon vorher mit Wolfenstein 3D zeigten, welches Potenzial in den eigentlich auf Büroarbeit titulierten „IBM-kompatiblen PCs“ steckt, wurde Microsoft aber zunehmend hellhöriger für die rasante Entwicklung der Entertainment-Branche. Unter Windows 95, welches genau wie seine Vorgänger bei Erscheinen noch über keine besonderen Programmierschnittstellen für Spiele verfügte, wollte Microsoft nachträglich eine Schnittstelle hinzufügen, um auch den wachsenden Markt der PC-Spieler von ihrem veralteten Betriebssystem MS-DOS auf Windows 95 zu migrieren. Diese erste Inkarnation nannte Microsoft „Game SDK“, die kaum mehr war als eine Handvoll Funktionen um Grafiken direkt in den Grafikspeicher zu blitten, und sie wurde von der Spieleindustrie, die jahrelang für MS-DOS entwickelt und dort Erfahrung gesammelt hat, quasi völlig ignoriert.

Ein zweiter Anlauf begann dann mit DirectX (Version 1.0), und Microsoft konnte id software dazu anhalten, eine Portierung ihres Hits „Doom“ mit dieser API für Windows 95 zu entwickeln, welche Microsoft auch prompt auf einer Messe präsentierte, um Entwickler aus aller Welt überzeugen zu können, eben mit DirectX direkt für den DeFacto-Standard Windows 95 zu entwickeln, anstatt für das veraltete MS-DOS (siehe Weblinks). Aber auch dieser Versuch scheiterte zunächst, da Microsoft den Aufwand, der für eine brauchbare Programmbibliothek mit auf Spielen optimierten Grafik- und Sound-Funktionen nötig war, völlig unterschätzte. Noch Jahre später kamen Spiele auf den Markt, die eigentlich völlig Protected Mode-DOS-Spiele waren, und u. U. nur ein paar zusätzliche Tools (z. B. Editoren) für Windows mitbrachten, bzw. nur die Autoplay-Funktionalität von Windows nutzten. Erst mit DirectX 3.0 (welches mit Direct3D auch erstmalig 3D-Funktionalität mitbrachte) erhielt DirectX eine gewisse Reife, und wurde allmählich auch von Entwicklern ernst genommen, und mit ihm erschienen auch die ersten Spiele, welche nur noch unter Windows mit DirectX (nicht mehr unter DOS) liefen (z. B. „Tomb Raider II“, „Diablo“). Mit DirectX 5.0 kamen dann so viele Neuerungen hinzu, dass Microsoft die Versionsnummer „4.0“ übersprang. Seitdem ist es eine große API mit umfangreicher Funktionalität, die viele Gebiete der Multimedia- bzw. Spiele-Programmierung abdeckt, wie 2D- und 3D-Grafik, Sound und Musik, Video / Capturing, Eingabe (und über Force Feedback auch „Ausgabe“ auf eigentlichen Eingabegeräten) und Netzwerk (s. u.).

Aufbau von DirectX

DirectX besteht (in der aktuellen Version 9c) aus folgenden Teilen:

DirectX Graphics

  • Unterstützung von 2D- und 3D-Grafik
  • Dies ist der am meisten genutzte Teil von DirectX. Er ermöglicht einen schnellen Direktzugriff auf die Grafikkarte.
  • DirectX Graphics stellt eine low-level API (Direct3D) und eine high-level API (Direct3DX) bereit.
  • Die low-level API Direct3D eignet sich für Anwendungen mit hoher Interaktionsrate und/oder Präsentationsfrequenz komplexer grafischer Szenen (wie z. B. bei 3D-Spielen). Bis zur Version 7 wurden bei der low-level API zwischen 2D-Grafik (DirectDraw) und 3D-Grafik (Direct3D) unterschieden. Durch eine Überarbeitung des Grafikbereichs (in Version 8) wurden beide Teile unter einer einheitlichen API in Direct3D zusammengefasst. Die explizite, eigenständige Weiterentwicklung von DirectDraw wurde damit eingestellt.
  • Die high-level API Direct3DX ermöglicht es, mit vertretbarem Aufwand 3D-Anwendungen zu realisieren. Direct3DX setzt auf Direct3D auf, d. h. es nutzt dessen Basisfunktionalität.
  • DirectX Graphics bietet direkten Zugriff auf die Grafikhardware vorbei am Graphics Device Interface (GDI) und Display Device Interface (DDI). Nicht durch die Hardware unterstützte Funktionen werden durch DirectX emuliert. Dafür nutzt der Hardware Emulation Layer (HEL) die Möglichkeiten von MMX-Prozessoren zur Manipulation von Bildern und greift auf Funktionen des Graphics Device Interface (GDI) zurück.
  • Unterstützt werden unter anderem Seitenumschaltung (Flipping) (siehe Backbuffer), Blitting, Clipping, 3D Z-Puffer, Overlays und direkte Steuerung des Datenflusses durch die Video-Port Hardware (Video-Port Manager).

DirectSound

  • Zur Wiedergabe und Aufnahme von Soundeffekten, unterstützt Raumklang (d. h. Positionierung der Klänge im 3D-Raum)
  • Daten aus mehreren Eingangspuffern (Secondary Sound Buffers) werden mit Effekten belegt und zusammen auf einen Ausgangpuffer (Primary Sound Buffer) gemischt. Eingangspuffer können in Software oder Hardware realisiert sein, statisch (z. B. aus einer Datei) oder dynamisch (z. B. Streaming von einem Mikrofoneingang) Daten liefern. Die Anzahl der Eingangspuffer, die gemischt werden können, ist ausschließlich durch die verfügbare Rechenleistung limitiert.
  • DirectSound stützt sich automatisch auf das Leistungsspektrum der installierten Soundkarte ab.
  • Es stehen Basiseffekte, wie Volume, Frequency Control, Panning bzw. Balance, zusätzliche Effekte, wie Reverb (Halleffekt), Chorus, Distortion, Equalization und 3D-Effekte, wie Rolloff, Amplitude Panning, Muffling, Arrival Offset, Doppler Shift Effekt zur Verfügung.

DirectMusic

DirectInput

DirectPlay

  • Für die Kommunikation von Multiplayerspielen untereinander, die auf mehreren Computern laufen (bei Netzwerkspielen oder Onlinespielen).
  • Im wesentlichen handelt es sich um ein Protokoll auf Anwendungsebene und ist somit unabhängig von konkret genutzten Protokollen der Transport- und Übertragungsebene (siehe dazu auch OSI-Modell). DirectPlay realisiert keine Mechanismen für das Zusammentreffen der Spieler (Matchmaking) oder das Abrechnen von Spielteilnahmen.
  • Kern bildet die Spielesitzung (DirectPlay Session), welche von einem „Host“ genannten Rechner erzeugt und moderiert wird. Spieler sind logische Objekte, von denen es pro Rechner mehrere geben kann, daher wird zwischen lokalen und entfernten Spielern unterschieden. Das Konzept von Spielergruppen wird unterstützt, und Spieler sind in der Lage, an andere Spieler Nachrichten zu versenden (Chat)
  • Hinweis: Für viele Spiele-Entwickler war der gewaltige Overhead von DirectPlay dafür entscheidend, es nicht zu verwenden und lieber einen eigenen performanteren Netzwerk-Zugriff auf Basis von WinSock zu realisieren. Andere haben sich wegen der festen Bindung an Windows dagegen ausgesprochen, da z. B. für speziell auf Windows-Systemen lauffähige First-Person-Shooter gerne auch eigene Linux-Server entwickelt werden.

DirectShow (ehemals „Direct Media“)

  • Für die Verarbeitung von Video- und Audio-Dateien.
  • Damit lassen sich verschiedenste Arten von Video-Dateien (AVI, MPEG) und Ton-Dateien (zum Beispiel MP3) wiedergeben oder erstellen. Unterstützt auch Internetstreaming und ist durch sog. DirectShow-Filter beliebig erweiterbar.

DirectSetup

  • DirectSetup ermöglicht Programmierern, ihre Installationsroutine automatisch überprüfen zu lassen, ob die benötigte DirectX-Version bereits installiert ist, und diese andernfalls zu installieren.

DirectX Media Objects

  • Bietet Möglichkeiten, Audio- und Video-Ströme zu verändern, und kann auch zusammen mit DirectSound und DirectShow verwendet werden.

Funktionsweise

DirectX ermöglicht direkte Zugriffe auf die Hardware des Systems, ohne die Programme von der Hardware abhängig zu machen. So wird Spiele-Entwicklern eine Hardware-Abstraktions-Schicht (HAL von engl. hardware abstraction layer) für die Spieleprogrammierung zur Verfügung gestellt, mit der langsame Schnittstellen (zum Beispiel Win GDI) umgangen werden. Funktionen, die von der Hardware und damit nicht von der HAL bereitgestellt werden können, werden in der Hardware-Emulations-Schicht (HEL von engl. hardware emulation layer) emuliert.

Alternativen zu DirectX

Neben DirectX sind auch freie APIs verfügbar, die im Gegensatz zu DirectX nicht auf die Windows-Plattform beschränkt sind. Allerdings sind die APIs nicht so umfassend, können aber große Teile von DirectX ersetzen und ermöglichen eine plattformunabhängige Softwareentwicklung. Einige dieser Alternativen wie etwa OpenGL und OpenAL bieten ebenso wie DirectX Hardwarebeschleunigung.

Wichtige APIs:

  • OpenGL für die 3D-Grafik
  • OpenAL für den 3D-Sound
  • SDL oder Allegro für Aufgaben wie z. B. die Unterstützung von Eingabegeräten, 2D-Grafik, plattformunabhängige Threadverwaltung und Netzwerk. Unter Windows setzen diese Bibliotheken auf DirectX auf.

Weitere Informationen

Anwendungen für DirectX werden mit Hilfe des DirectX SDK erstellt.

Informatives Testprogramm: DxDiag

WGF soll in Windows Vista DirectX als API ablösen.

Es war geplant, DirectX und weitere APIs in XNA zusammenzuführen.