VirtualBox 3D im Gastsystem

Erstellt am 08.03.2009

Zum Thema

Update: Seit dem 30.06.2009 gibt es ja bekanntlich VirtualBox 3.0. Im Changelog ist angekündigt, dass nun auch Direct3D 8/9 Programme und Spiele auf experimenteller Basis laufen. Letztlich muss man jetzt also nur noch die Guest Additions im SaveMode installieren und das Resultat ist das selbe, wie in meinem HowTo; man kann sich also etwas Arbeit sparen.

Mit der Version 2.10 ist in der kostenlosen Virtualisierungslösung VirtualBox aus dem Hause Sun Microsystems, Inc. die Möglichkeit hinzugekommen, dem Gastsystem 3D-Beschleunigung zu bieten. Das funktioniert soweit zunächst nur mit OpenGL-Anwendungen, mit einem kleinen Trick jedoch auch mit gewissen DirectX-Anwendungen. Wie genau, möchte ich in diesem Artikel beschreiben.

Für diese Anleitung habe ich die (zur Zeit) aktuelle Version 2.14 auf einem openSUSE 10.3 x86_64 Hostsystem mit AMD X2 4600+ und ein Windows XP Professional verwendet; die genauen einstellungen seht ihr im folgenden Bild:
Einstellungen der virtuellen Maschine
Die Verwendung von VT-x/AMD-V könnte evtl. noch Geschwindigkeitsverbesserungen bringen, ebenso wie Nested Paging.

In euren Linux-Hostsystem muss die 3D-Beschleunigung natürlich ebenfalls funktionieren... entsprechend sollten die TreiberBLOBs des Grafikkartenherstellers installiert sein und ein glxinfo | grep direct sollte ein direct rendering: Yes liefern.

Schritt für Schritt

Wenn ihr also alles soweit vorbereitet habt seid ihr eigentlich schon so gut wie fertig :D. Zumindest wenn ihr OpenGL-Anwendungen verwenden wollt; Außer den Gasterweiterungen muss nichts weiter installiert werden. Zum testen könnte man z.B. mal Extreme Tux Racer installieren. Bei mir läuft es absolut flüssig mit ca. 120 FPS (bei Problemen mit der Maus -> Mauszeiger-Integration deaktivieren):

Tuxracer in der VM

Doch wie geht das denn jetzt mit Anwendungen, die DirectX verwenden?

Ein Blick in das DirectX-Diagnose-Programm (Start -> ausführen -> dxdiag (keine Treibersignaturen überprüfen)) verrät uns: DirectDraw aktiviert, Direct3D deaktiviert. Was wir zunächst benötigen ist eine aktuelle Version von DirectX -> ein kurzer Blick zu Google sollte euch die letzte Version für WindowsXP, nämlich 9.0c, zum Download bieten.
Nach erfolgreichem Download dürft ihr es auch prompt installieren.

Das Problem: VirtualBox kann mit den DirectX-Befehlen nichts anfangen, da sie ja nur OpenGL unterstützt. Die Lösung bietet das Wine-Projekt, welches einen Wrapper beinhaltet, der die DirectX-Funktionen auf OpenGL "abbildet". Ihr müsst jetzt also nur diesen Wrapper unter Windows installieren sodass dort genau das selbe geschieht. Glücklicherweise haben die Wine-Entwickler diesen Wrapper sehr elegant gelöst. Er ist nicht etwa direkt in Wine verankert, sondern er lässt sich als genau jene DLLs kompilieren, auf die im Normalfall DirectX selber zurückgreift.

In der Praxis sieht das so aus, dass ihr euch die Wined3d-DLLs herunterladen müsst und damit die DirectX-DLLs überschreiben. Einen fertigen Installer findet ihr z.B. hier: http://download.savannah.gnu.org/releases/wined3d/latest/; einfach die wined3d.exe herunter laden.

Diese nun nicht einfach installieren, sondern die virtuelle Maschine im "Abgesicherten Modus" neustarten (beim booten einfach wild auf F8 drücken, dann könnt ihr den abgesicherten Modus auswählen). Dort angekommen geht es zunächst in den Ordner C:\WINXP\System32\dllcache. Hier müsst ihr die beiden DLLs löschen, die anschließend mit den Wine-DLLs überschrieben werden sollen, weil Windows diese sonst wieder aus dem DLL-Cache überschreiben würde. Also werden die d3d8.dll und d3d9.dll gelöscht.

Jetzt dürft ihr die wined3d.exe ausführen. Ich habe dort alles bei den Standardeinstellungen belassen; wer experimentierfreudig ist kann natürlich auch gerne noch die Version 7 ausprobieren. Nach der Installation das System neustarten und ganz normal hochfahren.

Der letzte Punkt ist zu überprüfen, ob die Installation geklappt hat:

Über Start -> ausführen -> dxdiag gelangt ihr wieder in das Diagnose-Programm. Unter der Registerkarte "DirectX-Dateien" sollten die beiden DLLs aus dem Wine-Projekt nun mit einem Warnhinweis versehen sein:

DirectX-Dateien mit Wine-DLLs

Weiter geht es auf der Registerkarte "Anzeige", auf der jetzt Direct3D auf Aktiviert stehen sollte. Der dazugehörige Knopf Direct3D testen wartet förmlich angeklickt zu werden :D

Direct3D Aktiviert

Die Direct3D 7-Schnittstelle funktioniert bei mir erwartungsgemäß nicht, Version 8 immerhin sporadisch und 9 hat bisher immer geklappt.
Zeit für einen ersten Test.

Anwendungen mit Direct3D

Für einen ersten Test habe ich eine Anwendung herangezogen, von der ich wusste, dass sie mit dem Wrapper von Wine funktioniert: Winamp mit dem Monkey-Vizualizer-Plugin. Das Ergebnis ist eine ruckelfreie Anzeige in der Virtuellen Maschine:

Monkey-Vizualizer Monkey-Vizualizer dark

Sieht doch schon ganz nett aus. Doch was ist mit z.B. Spielen?
Hier gleich die traurige Botschaft: nicht so dolle. Nachdem das ganze ja auf dem Wrapper von Wine aufbaut funktionieren auch nur die Programme, die ohnehin schon mit Wine funktionieren. Entsprechend konnte ich jeweils weder das gute alte Unreal 2 noch Tomb Rider - The Angle of Darkness zur Funktion überreden. Funktionieren würde aber etwa Trackmania Nations.

Über Anregungen, Erfahrungsberichte und was weiß ich was zu dem Thema würde ich mich jedenfalls sehr freuen und sie hier auch gerne dazuschreiben.


Als Quellenangabe möchte ich euch noch die folgende Adresse ans Herz legen: http://www.virtualbox.org/ticket/2940

Seitenanfang