Zum Inhalt springen

DirectX

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. September 2007 um 00:33 Uhr durch 134.2.246.174 (Diskussion) (DirectX 10). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Microsoft DirectX

Basisdaten

Entwickler Microsoft Corporation
Erscheinungsjahr 30. September 1995
Aktuelle Version 10.0
(Format invalid)
Betriebssystem Microsoft Windows
Programmier­sprache High Level Shader Language, C++
Kategorie Programmierschnittstelle
Lizenz MS-EULA
für Endbenutzer

für Entwickler

DirectX [dɪˈrektˈeks] ist eine Sammlung von COM-basierten Programmierschnittstellen (englisch: Application Programming Interface, kurz API) für multimedia-intensive Anwendungen (besonders Spiele) auf der Windows-Plattform und kommt auch auf der Spielekonsole Xbox zum Einsatz.

Die DirectX-Sammlung von Software-Komponenten deckt nahezu den gesamten Multimediabereich ab. Vorrangig kommt es zum Einsatz bei der Darstellung komplexer 2D- und 3D-Grafik, bietet aber auch Unterstützung für Audio, diverse Eingabegeräte (z. B. Maus, Joystick) und Netzwerkkommunikation.

Entwicklungsgeschichte

Vorgeschichte und MS-DOS

Nachdem sich seit Mitte der 1980er Jahre der IBM (kompatible) PC mit dem Betriebssystem MS-DOS als „Computer für Jedermann“ durchsetzte, begann auch der Siegeszug für die grafische Benutzeroberfläche (engl. GUI) Microsoft Windows. In den 1990ern wurden die verbreiteten Anwendungen zunehmend für Microsoft Windows portiert, und viele neue Anwendungen wurden exklusiv für Windows mithilfe der WinAPI entwickelt. Einzige Ausnahme blieben Computerspiele, die anfangs 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 Programmier-Schnittstellen, und so wurden diese meist nur 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 die gesamte 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 parallel laufenden Programmen zu interferieren. Microsoft schenkte der Entertainment-Branche und Unterhaltungsmedien wie Computerspielen abseits von Solitär zu diesem Zeitpunkt noch wenig Beachtung.

Siegeszug der 3D-Grafik

Nach dem einschlagenden Erfolg des Computerspiels Doom von id Software, die schon vorher mit Wolfenstein 3D zeigten, welches technische Potenzial in den eigentlich vorrangig für Büroarbeit verwendeten „IBM-kompatiblen PCs“ steckt, wurde Microsoft aber zunehmend hellhöriger für die Entwicklung des Unterhaltungssegments. 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 hatte, völlig ignoriert.

Parallel wurde WinG entwickelt, eine Bibliothek mit identischem Ansatz, jedoch bevorzugt für den 256-Farben-Modus. Diese Bibliothek kam zum Beispiel in „Lemmings for Windows“ zum Einsatz und war auch unter dem Betriebssystem Windows 3.11 (for Workgroups) verfügbar.

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. Diese wurde von Microsoft auch prompt auf einer Messe präsentiert, um Entwickler aus aller Welt dazu zu bringen, mit DirectX direkt für den De-facto-Standard Windows 95 zu entwickeln statt für das veraltete MS-DOS [1].

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 durchgängig Protected-Mode-DOS-Spiele waren und höchstens ein paar zusätzliche Hilfsprogramme (z. B. Editoren) für Windows mitbrachten oder nur die Autoplay-Funktionalität von Windows nutzten.

Direct3D

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. Mit ihm erschienen auch die ersten Spiele, welche nur noch unter Windows mit DirectX und nicht mehr unter MS-DOS liefen, z. B. Tomb Raider II oder 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.).

DirectX 10

Die derzeit aktuelle Version ist DirectX 10.0. Anders als die Vorgänger ist diese nur unter dem neuen Betriebssystem Windows Vista lauffähig und besteht ausschließlich aus dem neuen Direct3D 10. Benutzer älterer Versionen wie Windows XP oder Windows Me müssen sich weiterhin auf die Vorgängerversion DirectX 9.0c beschränken. Dies zwingt Computerspieler bzw. Grafiker, die nicht auf die neuen Funktionen von DirectX verzichten möchten, in naher Zukunft zu Windows Vista zu migrieren.

Im April 2007 hat Cody Brocious, ein Programmierer aus San Diego, behauptet, im Rahmen seines „Alky-Projekts“ eine Möglichkeit gefunden zu haben, das eigentlich fest mit Windows Vista verbundene Direct3D 10 über eigene Bibliotheken auch auf anderen Betriebssystemen zu nutzen. [1] Mittlerweile ist eine Vorabversion erschienen, die jedoch nicht über den Alphastatus hinausgekommen ist.

Direct3D 10 benutzt das neue Windows Display Driver Model und Shader Model 4, kombiniert mit strengeren Regeln für die Hersteller von Grafikkarten, die Direct3D-10-Kompatibilität für sich in Anspruch nehmen möchten.

Ab Direct3D 10 werden bis auf wenige Ausnahmen keine cap-bits mehr verwendet, anhand derer Programme feststellen können, welche Funktionen genau die Hardware zur Verfügung stellt. Daher muss Direct3D 10 und jedes folgende Update neue Funktionen immer in Form von Mindestanforderungen einführen. Damit kommt Microsoft den Spieleentwicklern entgegen, da diese die Hardware bisher auf eine Vielzahl an möglichen Funktionalitätskombinationen abfragen mussten. Dagegen werden Hardwarehersteller nun dazu gezwungen, bestimmte Funktionalitäten zu implementieren, um Kompatibilität mit der jeweiligen Direct3D-Version zu erreichen. Dadurch wird die Fähigkeit der Hardwareproduzenten, sich durch optionale Komponenten von Wettbewerbern abzuheben, eingeschränkt.

Die Unterschiede von Direct3D 10 zu den Vorgängern liegen weniger in direkt sichtbaren Eigenschaften als vielmehr in der Erweiterung, Modularisierung und Flexibilisierung der 3D-Funktionen. Es wird daher erst mittelfristig mit Anwendungen gerechnet, die die neuen Möglichkeiten so ausschöpfen, dass der Anwender einen spürbaren Fortschritt sieht.

Direct3D 10.1

Direct3D 10.1 soll zusammen mit Windows Vista SP1 ausgeliefert werden und beinhaltet gegenüber Direct3D 10 nur wenige Änderungen.

Grafikkarten der DirectX-10.1-Klasse müssen über folgende Fähigkeiten verfügen:

  • Shader Model 4.1
  • 4x Anti-Aliasing mit veränderbaren Subpixel-Mustern.
  • durchwegs mit 32-Bit-Gleitkommazahlen rechnen
  • dynamisch adressierbare Cubemap-Arrays
  • rendern in blockkomprimierte Framebuffer

Falls die Grafikkarte eines dieser Features nicht unterstützt kann sie kein Direct3D-10.1-Interface anbieten und die Applikation muss auf Direct3D 10 zurückfallen.

Aufbau von DirectX

DirectX besteht in der Version 9.0c 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 passt sich automatisch dem Leistungsspektrum der installierten Soundkarte an.
  • 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

  • Für die Wiedergabe von Musik (MIDI-Musik, allerdings keine komprimierte Musik wie MP3). DirectMusic liefert dazu einen Software-Synthesizer Service. Verwendet wird ein DLS2-Synthesizer. Siehe DirectShow für die Wiedergabe von komprimierte Musik wie MP3 und video (AVI,MPEG).

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, jeder Spieler kann dabei gleichzeitig mehreren Gruppen angehören. Die 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.
  • DirectShow ist inzwischen aus dem DirectX SDK entfernt und in das Windows Platform-SDK aufgenommen worden. Somit gehört DirectShow streng genommen nicht mehr zu DirectX, sondern ist jetzt ein Bestandteil der Windows-Plattform.

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.
  • 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:

  • OpenML für Multimedia-Verarbeitung, d.h. vor allem Video, ersetzt DirectShow bzw. DirectX Media
  • OpenGL für (3D-)Grafik, ersetzt Direct3D bzw. DirectX Graphics
  • OpenAL für (3D-)Sound, ersetzt DirectSound und DirectMusic
  • HawkNL [2], ENET [3], oder RakNet [4] für den Netzwerkbereich und VoIP Übertragung, ersetzt DirectPlay
  • SDL, ClanLib 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.
  • GAPI, die Gaming API für den PocketPC (Windows CE/mobile)

Mit der Software Cedega der Firma TransGaming Technologies Inc. kann man DirectX-Spiele (bis Version 9) auch unter verschiedenen Linux-Versionen spielen. Mittlerweile ist dies auch mit der Software CrossOver der Firma Codeweavers möglich. Auch Wine unterstützt DirectX bereits sehr gut.

Weitere Informationen

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

Ein informatives Testprogramm ist DxDiag. Dieses wird mitgeliefert und kann über Start → Ausführen → dxdiag gestartet werden.

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

Quellen

  1. Alky Project Blog