„DirectX“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Zeile 160: Zeile 160:


<!-- Offizielle Quellen -->
<!-- Offizielle Quellen -->
* [http://www.microsoft.com/windows/directx Microsoft DirectX] (englisch) – Website für [[Endbenutzer]]
* [http://www.gamesforwindows.com/en-US/AboutGFW/Pages/directx10-a.aspx Microsoft DirectX] (englisch) – Website für [[Endbenutzer]]
* [http://msdn.microsoft.com/directx Microsoft DirectX Developer Center] (englisch) – Website für Entwickler
* [http://msdn.microsoft.com/directx Microsoft DirectX Developer Center] (englisch) – Website für Entwickler
<!-- Andere Quellen -->
<!-- Andere Quellen -->

Version vom 5. Dezember 2007, 15:25 Uhr

Microsoft DirectX

Basisdaten

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

für Entwickler

DirectX [daɪˈ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“ durchgesetzt hatte, begann auch der Siegeszug der grafischen 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 mit Hilfe 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 ungehinderten 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 der Firma id Software, die schon vorher mit Wolfenstein 3D gezeigt hatte, 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“, und sie war kaum mehr 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 erfolgreichen Spiels „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, weit 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 aktuelle (2007) Version ist DirectX 10.0. Anders als die Vorgänger ist diese nur unter dem neuen Betriebssystem Vista lauffähig, während für Windows XP oder Me weiter nur DirectX 9.0c zur Verfügung steht.

Im April 2007 erschienen Meldungen, wonach die neuen Direct3D-10-Funktionen über eigene Bibliotheken auch auf anderen Betriebssystemen nutzbar seien.[1] Ob dieses Projekt Erfolg haben wird ist ungewiss, da wesentliche Teile der Direct3D-10-API nicht öffentlich dokumentiert sind.

Neu an Version 10 ist nur Direct3D 10, welches das neue Windows Display Driver Model und Shader Model 4 benutzt, 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 jede folgende Version 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.

DirectX 10.1

DirectX 10.1 wird zusammen mit Windows Vista SP1 ausgeliefert und beinhaltet gegenüber DirectX 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
  • durchweg mit 32-Bit-Gleitkommazahlen rechnen
  • dynamisch adressierbare Cubemap-Arrays
  • rendern in blockkomprimierte Framebuffer

Falls die Grafikkarte eine dieser Funktionen nicht unterstützt, kann sie keine Direct3D-10.1-Schnittstelle anbieten, und die Applikation muss auf Direct3D 10 zurückfallen.

Neben diesen Änderungen, die die Direct3D-API betreffen, wird XAudio 2 eingeführt, welches DirectSound ersetzen soll.

Weiterhin ist zu beachten, dass DirectX-10-Grafikkarten die Grafikfunktionen von DirectX 10.1 nicht unterstützen und somit neue Hardware erforderlich ist.

Aufbau von DirectX

DirectX besteht 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 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 komprimierter Musik wie MP3 und Video (AVI,MPEG).

XAudio 2

  • Basierend auf der Xbox-360-Sound-API
  • Soll DirectSound ablösen
  • Programmierbare DSP-Programme ermöglichen EAX-ähnliche Effekte auf allen Soundkarten; diese werden allerdings auf dem Hauptprozessor ausgeführt. Dies hat vor allem Kritik seitens des Herstellers von Soundkarten Creative hervorgerufen, weil auf dessen Karten solche DSP-Programme „in Hardware“ ausgeführt werden könnten, um Spielern somit einen Geschwindigkeitsvorteil zu bieten (durch Entlastung der Haupt-CPU).

DirectInput

XInput

  • Ausschließlich für die Verwendung von Xbox-360-Controllern unter Windows vorgesehen

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 es 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 können an andere Spieler Nachrichten 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 effektiveren 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