Microsoft hat es geschafft, DirectX als eine der wichtigsten Schnittstellen im Bereich Multimediaprogrammierung zu etablieren. Mittlerweile gehört DirectX zum Standardrepertoire von Windows. Version 7.0 ebnete Visual-Basic-Programmierern das Tor zu einer neuen (dreidimensionalen) Welt. Dasselbe tat Microsoft für die .NET-Anhänger in Version 9.0, für die eigens eine verwaltete Schnittstelle angeboten wurde – auch bekannt als Managed DirectX. Nahezu jedes aktuelle Computerspiel auf dem Markt macht von der Multimediaschnittstelle Gebrauch. Die nächste Ära wird mit dem neuen XNA Framework und dazu passend dem (kostenlosen) XNA Game Studio Express eingeläutet. Erstmals gibt es von Microsoft eine eigene Entwicklungsumgebung für Spieleentwickler, wenngleich diese vorerst nur aus Vorlagen für das Visual C# Express besteht. Das Besondere an XNA ist, dass die Spiele nicht nur auf einem Windows-PC, sondern auch auf der XBox 360 laufen.
Wie Microsoft verlauten ließ, wird sich Windows Vista als einzige Plattform mit den Funktionalitäten von DirectX 10 schmücken können. Derzeit liegt dem DirectX 9 SDK (August 2006) eine native Beta-Version von DirectX 10 bei. Soll heißen .NET-Entwickler können ähnlich wie mit Managed DirectX noch nicht direkt in den Genuss der neuen Schnittstelle kommen. Genauso wie im XNA Framework unterstützt DirectX 10 die Fixed Function Pipeline nicht mehr. Alle Render-Vorgänge werden mithilfe von Vertex und Pixel Shadern realisiert. Zudem wird der komplette Befehlssatz von DirectX 10 garantiert, weshalb die CAPS wegfallen und die Hardware-Fähigkeiten nicht mehr abgefragt werden müssen. Ein weiteres Manko der aktuellen Beta-Version ist die fehlende Unterstützung eines Hardware-Device. Zurzeit werden alle Funktionalitäten emuliert, weshalb die Geschwindigkeit noch etwas bescheiden ist.
XNA Framework – ein Blick hinter die Kulissen
Das XNA Framework stellt eine Reihe verwalteter APIs zur Verfügung, mit denen die Entwicklung von Computerspielen, sowohl für den Windows-PC als auch für die XBox 360 vereinfacht beziehungsweise überhaupt erst möglich wird. XNA spielt die Rolle eines Mittlers zwischen der Anwendung und der Hardware, wie es DirectX bislang getan hat. Zudem bietet das XNA Framework einen Rahmen, auf dem die Handlung eines Spiels aufgesetzt wird. Das Framework bildet eine weitere Abstraktionsebene, welche den Vorteil bietet, dass sich der Quellcode einer Windows und der einer XBox-360-Version, laut Microsoft, bis zu 95 Prozent gleicht. Lediglich einige plattformspezifische Funktionalitäten, welche durch das XNA Framework nicht verborgen werden können, verhindern die hundertprozentige Übereinstimmung beider Quelltexte.Glaubt man jenen Spieleherstellern, die das XNA Framework bereits im Einsatz haben, lässt sich bereits nach wenigen Minuten der Code für das Spiel schreiben. Lästige, immer wiederkehrende Aufgaben, wie beispielsweise die Initialisierung des Render-Device oder die Wiederherstellung des Device beim Skalieren des Fensters, gehören der Vergangenheit an – jene Aufgaben übernimmt das XNA Framework (zumal die XBox 360 keine typischen Fenster kennt).
Schichten sind wieder aktuell
Wo sich das XNA Framework einreiht, lässt sich am einfachsten erkennen, wenn das ganze System in Schichten unterteilt wird. Die folgende Auflistung schematisiert das gesamte Modell von der tiefsten Ebene bis zur höchsten Ebene:- Plattform: Gebildet wird die Plattform über eine Reihe von nativen und verwalteten APIs. Darunter zählt beispielsweise Direct3D zur Kommunikation mit der Grafikkarte, XACT, XInput oder XContent (die Begriffe werden später noch etwas genauer beschrieben).
- Core Framework: Diese Schicht des XNA Framework kann mit den Aufgaben von Managed DirectX verglichen werden. Innerhalb dieser Schicht sind alle verwalteten Schnittstellen enthalten, die von der Anwendung in Anspruch genommen werden können. Zu den Aufgabenbereichen des Core Framework gehört die Ausgabe von Grafik- und Audioinformationen, die Ansprache von Eingabegeräten oder die Bereitstellung von mathematischen Strukturen und Methodiken zur Speicherung von Spielständen oder Highscorelisten.
- Extended Framework: Das erweiterte Framework baut auf den Standardfunktionalitäten, wie sie in ähnlicher Form auch Managed DirectX bietet auf und vereinfacht die Entwicklung von Computerspielen, indem ein Anwendungsrahmen geschaffen wird. Zwei wichtige Komponenten hören auf die Namen Application Model und Content Pipeline. Beide schließen jene Prozesse ein, die zu jeder Entwicklung dazugehören.
- Computerspiel: Das Produkt, ein Computerspiel, Bildschirmschoner oder eine grafische Visualisierung von Geschäftsdaten baut letztlich auf das erweiterte Framework auf. Von Beginn an steht die eigentliche Programmlogik im Vordergrund. Einige Verwaltungsaufgaben entfallen, da sie bereits vom erweiterten Framework übernommen werden.
Unterschiede zwischen Direct3D und XNA
Bisher stellte Direct3D eine so genannte Fixed Function Pipeline zur Verfügung mit deren Hilfe sich Vertices transformieren und beleuchten ließen. Auch die Texturierung von Primitiven gehörte mit zu deren Aufgabenbereich.Hinter einem Vertex Shader bzw. einem Pixel Shader verbirgt sich eine kleine „Anwendung“ die von der GPU (Graphic Processing Unit) ausgeführt wird. In den Anfangsstadien mussten diese Shader mittels einer Assembler-Sprache entwickelt werden. Mittlerweile bietet Microsoft mit HLSL (High Level Shader Language ) eine an C angelehnte Hochsprache an. Der Compiler generiert aus diesem Code den Assembler-Code.
Im XNA Framework entfällt die Fixed Function Pipeline. Als Konsequenz müssen alle genannten Aufgaben mithilfe von Vertex Shadern beziehungsweise Pixel Shadern realisiert werden. Der Grund für den Wegfall ist zum einen die fehlende Unterstützung der Fixed Function Pipeline auf der XBox 360 und zum anderen die Angleichung an DirectX 10 (siehe Kasten „DirectX 10“).
XACT und XInput
XACT ist ebenfalls ein Cross-Platform-API zur Wiedergabe von Audiodaten. Das Konzept dahinter ähnelt dem der Shader in Direct3D. Mittels des Tools XACT, welches Bestandteil des DirectX SDKs ist, erstellt ein Sound-Designer ein Paket, indem beispielsweise die Lautstärke und die angewendeten Effekte definiert sind. Aufgabe des Programmierers ist es, dieses Paket zu laden und mit einem Aufruf von Play() den Sound an geeigneter Stelle wiederzugeben. XInput ist eine vergleichbare Terminologie, mit dem Unterschied dass damit Eingabegeräte angesprochen werden.Content Pipeline
Grundlegend besteht die Content Pipeline aus einem Importer, dem Content DOM und einem Prozessor. Standardmäßig wird XNA Game Studio Express die folgenden Formate unterstützen:- 3D-Formate (*.x, *.fbx)
- 2D-Formate (*.jpg, *.bmp, *.dds, *.png, *.tga)
- Material File Formats (*.fx)
- Audio File Formats/ XACT (*.xap)
Ein Importer kümmert sich darum, dass die Daten von der Festplatte gelesen werden und anschließend im Content DOM vorliegen. Ähnlich wie derzeit dem Projekt eine Codedatei hinzugefügt wird, werden später sämtliche Ressourcen in dem Projekt untergebracht. Ein Prozessor (den der Entwickler auch selber schreiben kann) bezieht die Daten aus dem Content DOM und bereitet sie entsprechend auf, um anschließend ein typisiertes Objekt im Content Manager zur Verfügung zu stellen.
Schnellstart
Für eine erfolgreiche Installation der XNA Game Studio Express Beta gelten folgende Komponenten als Voraussetzung:- Visual C# 2005 Express: Mit einer gleichwertigen Visual-Studio-Version funktioniert die Installation nicht. Sie müssen notfalls Visual C# 2005 Express neben dem Visual Studio installieren.
- DirectX 9.0c Runtimes: XNA Game Studio Express fordert die aktuellen DirectX-9-Bibliotheken. Wer XACT nutzen möchte, um Audio-Dateien sowohl für den PC als auch für die XBox360 zu erstellen, muss das DirectX 9.0 SDK (August 2006) installieren. Die Laufzeitumgebung ist im Software Development Kit enthalten.
Nach dem Start von XNA Game Studio Express wird ein neues Projekt vom Typ „Windows Game (XNA)“ angelegt. Die Datei Game.cs bildet den Anwendungsrahmen. Er wird durch das Application Model definiert und stellt bereits zu Beginn eines neuen Projekts eine lauffähige „DirectX-Anwendung“ dar. Listing 1 zeigt den Rahmen.
Listing 1: Der durch ein neues Projekt angelegte Rahmen------------------------------------------------------------------------------------partial class Game1 : Microsoft.Xna.Framework.Game{public Game1(){InitializeComponent();}protected override void Update(){float elapsed = (float)ElapsedTime.TotalSeconds;//Update-Logik Ihres Spiels (z.B. Objekt verschieben)UpdateComponents();}protected override void Draw(){if (!graphics.EnsureDevice())return;graphics.GraphicsDevice.Clear(Color.CornflowerBlue);graphics.GraphicsDevice.BeginScene();DrawComponents();graphics.GraphicsDevice.EndScene();graphics.GraphicsDevice.Present();}}
Aus Listing 1 wird bereits ersichtlich, dass das Application Model die Berechnung der vergangenen Zeit seit dem letzten Render-Durchgang durchführt. Weiterhin verfügt das Formular über ein Objekt vom Typ GraphicsComponen t. Jenes Objekt stellt den Direct3D-Device zur Verfügung. Gelagert wird die Komponente innerhalb einer Auflistungsklasse vom Typ GameComponentCollections . Jener Typ dient der Aufnahme sämtlicher Objekte, die von GameComponent erben. GameComponent -Objekte können aus der Toolbox auf die Form gezogen werden, ähnlich wie es bei Windows-Forms-Anwendungen der Fall ist. GameComponent als Basisklasse stellt sicher, dass Komponenten anderer Projekte problemlos wieder verwendet werden können.
Fazit
Bereits die erste Beta-Version des XNA Framework lässt nur Positives erwarten, um die Entwicklung von Computerspielen zu vereinfachen. Zwar sind einige Änderungen seitens der Grafikausgabe vorgenommen worden, dennoch sind Entwickler mit Kenntnissen von Managed DirectX im XNA Framework gut aufgehoben. Damit der Einstieg aufgrund der Shader-Programmierung nicht scheitert, bietet die XNA-Klassenbibliothek genügend Hilfsklassen an. Weiterhin werden parallele Prozesse, wie etwa die Verarbeitung von 3D-Modellen anderer Tools, durch die Content Pipeline vereinfacht. Zwar umfasst die Beta-Version noch nicht alle Funktionalitäten, dennoch lässt sich bereits erahnen wie spektakulär einfach in absehbarer Zeit Spiele für den Computer und die XBox360 entwickelt werden können.Jens Konerow studiert Informatik und ist nebenbei als Software-Entwickler bei der Firma KEEP IT SIMPLE GmbH in Hamburg tätig. Für Fragen steht er Ihnen gerne unter der E-Mail-Adresse Jens.Konerow[at]keepitsimple.de zur Verfügung.




