Planen der DirectX-Portierung

Zusammenfassung

Planen Sie das Portieren des Spiels von DirectX 9 zu DirectX 11 und zur Universellen Windows-Plattform (UWP): Führen Sie ein Upgrade des Grafikcodes durch, und fügen Sie das Spiel in die Windows-Runtime-Umgebung ein.

Planen der Portierung des Grafikcodes

Bevor Sie mit der Portierung des Spiels für UWP beginnen, müssen Sie sicherstellen, dass das Spiel keine Überbleibsel aus Direct3D 8 mehr aufweist. Vergewissern Sie sich, dass im Spiel keine Reste der Pipeline mit festen Funktionen vorhanden sind. Eine vollständige Liste der veralteten Features, einschließlich der Pipeline mit festen Funktionen, finden Sie unter Veraltete Features.

Das Upgrade von Direct3D 9 auf Direct3D 11 ist mehr als nur ein Suchen-und-Ersetzen-Vorgang. Sie müssen für Direct3D den Unterschied zwischen Gerät, Gerätekontext und Grafikinfrastruktur kennen und sich mit den anderen wichtigen Änderungen vertraut machen, die seit Direct3D 9 vorgenommen wurden. Sie können damit beginnen, indem Sie sich die Informationen in den anderen Themen dieses Abschnitts durchlesen.

Ersetzen Sie die Hilfsbibliotheken D3DX und DXUT durch Ihre eigenen Hilfsbibliotheken oder durch Communitytools. Weitere Informationen finden Sie im Abschnitt Featurezuordnung.

Hinweis Sie können das DirectX Tool Kit oder DirectXTex verwenden, um einige Funktionen zu ersetzen, die zuvor von D3DX und DXUT bereitgestellt wurden.

 

Shader, die in der Assemblysprache geschrieben wurden, sollten mithilfe der Funktionalität des Shadermodells 4 der Ebene 9_1 oder 9_3 auf HLSL aktualisiert werden, und Shader, die für die Effects-Bibliothek geschrieben wurden, müssen auf eine neuere Version der HLSL-Syntax aktualisiert werden. Weitere Informationen finden Sie im Abschnitt Featurezuordnung.

Machen Sie sich mit den verschiedenen Direct3D-Featureebenen vertraut. Mithilfe von Featureebenen wird ein großer Bereich von Videohardware klassifiziert, indem Gruppen bekannter Funktionen definiert werden. Jede Gruppe entspricht grob den Versionen von Direct3D, und zwar von 9.1 bis 11.2. Für alle Featureebenen wird die DirectX 11-API verwendet.

Planen der Portierung des Win32-UI-Codes zu CoreWindow

UWP-Apps werden in einem Fenster ausgeführt, das für einen App-Container erstellt wurde. Dieses wird als CoreWindow bezeichnet. Das Spiel steuert das Fenster, indem es von IFrameworkView erbt. Dafür sind weniger Implementierungsdetails als für ein Desktopfenster erforderlich. Die Hauptschleife des Spiels befindet sich in der IFrameworkView::Run-Methode.

Der Lebenszyklus einer UWP-App unterscheidet sich von dem einer Desktop-App. Das Spiel sollte häufig gespeichert werden, da die App bei einem Anhalteereignis nur über einen begrenzten Zeitraum verfügt, um die Ausführung des Codes zu stoppen. Es soll sichergestellt sein, dass Spieler beim Fortsetzen der App sofort an der vorherigen Stelle weiterspielen können. Spiele sollten gerade häufig genug gespeichert werden, damit nach dem Fortsetzen kontinuierliches Spielen möglich ist. Es sollte jedoch nicht so oft gespeichert werden, dass die Framerate beeinträchtigt wird oder das Spiel stockt und ruckelt. Wenn das Spiel nach einem Beendigungszustand fortgesetzt wird, muss möglicherweise der Spielstatus geladen werden.

DirectXMath kann als Ersatz für D3DXMath und XNAMath verwendet werden, wenn Sie eine Mathematikbibliothek benötigen. DirectXMath verfügt über schnelle, portierbare Datentypen und Typen, die aufeinander abgestimmt und zur Verwendung mit Shadern als Paket vorhanden sind.

Native Bibliotheken wie die interlocked-API wurden erweitert, um systeminterne Arm-Funktionen zu unterstützen. Wenn in Ihrem Spiel miteinander verbundene APIs verwendet werden, können Sie diese unter DirectX 11 und UWP weiterhin verwenden.

In den Vorlagen und Codebeispielen von Microsoft werden neue C++-Features verwendet, die Sie möglicherweise noch nicht kennen. Beispielsweise werden asynchrone Methoden in Verbindung mit Lambda-Ausdrücken eingesetzt, um Direct3D-Ressourcen laden zu können, ohne den UI-Thread zu blockieren.

Zwei Konzepte werden Sie jedoch häufig anwenden:

  • Verwaltete Verweise (^ Operator) und verwaltete Klassen (Verweisklassen) sind wesentliche Bestandteile der Windows-Runtime. Die Verwendung von verwalteten Verweisklassen ist erforderlich, um Schnittstellen zu Windows-Runtime-Komponenten wie IFrameworkView einzurichten. Weitere Informationen finden Sie in der exemplarischen Vorgehensweise.
  • Verwenden Sie beim Arbeiten mit Direct3D 11-COM-Schnittstellen den Microsoft::WRL::ComPtr-Vorlagetyp, um die Nutzung von COM-Zeigern zu vereinfachen.