Bearbeiten

DirectX 11 – Häufig gestellte Fragen zur Portierung

Antworten auf häufig gestellte Fragen zur Portierung von Spielen zur Universellen Windows-Plattform (UWP)

Kann ich mein Spiel durch Suchen und Ersetzen von API-Methoden portieren, oder ist eine sorgfältigere Planung des Portierungsprozesses erforderlich?

Direct3D 11 wurde gegenüber Direct3D 9 deutlich aktualisiert. Es wurden mehrere Paradigmenwechsel vorgenommen, darunter separate APIs für den virtualisierten Grafikadapter und seinen Kontext sowie eine neue Polymorphieebene für Geräteressourcen. Im Wesentlichen kann Ihr Spiel Grafikhardware weiter wie zuvor verwenden. Sie müssen sich allerdings mit der neuen API-Architektur von Direct3D 11 vertraut machen und alle Teile Ihres Grafikcodes zur Verwendung der richtigen API-Komponenten aktualisieren. Siehe Portierungskonzepte und Überlegungen zur Portierung.

Wofür dient der neue Gerätekontext? Muss ich mein Direct3D 9-Gerät durch das Direct3D 11-Gerät ersetzen, den Gerätekontext oder beides?

Das Direct3D-Gerät wird jetzt zum Erstellen von Ressourcen im Videospeicher verwendet. Der Gerätekontext dient dagegen zum Festlegen des Pipelinestatus und Generieren von Renderbefehlen. Weitere Informationen finden Sie unter Was sind die wichtigsten Änderungen seit Direct3D 9?

Muss ich meinen Spieltimer für UWP aktualisieren?

QueryPerformanceCounter in Verbindung mit QueryPerformanceFrequency ist nach wie vor die beste Methode, um einen Spieltimer für UWP-Apps zu implementieren.

Eine Kleinigkeit sollten Sie im Hinblick auf Timer und den UWP-App-Lebenszyklus beachten. Das Anhalten und Fortsetzen ist nicht das Gleiche wie das erneute Starten eines Desktopspiels durch den Spieler, da das Spiel in diesem Fall eine Momentaufnahme ab dem Zeitpunkt fortsetzt, zu dem das Spiel zuletzt gespielt wurde. Ist viel Zeit vergangen – z. B. einige Wochen – können bei einigen Timerimplementierungen Fehler auftreten. Sie können App-Lebenszyklusereignisse verwenden, um Ihren Timer beim Fortsetzen des Spiels zurückzusetzen.

Spiele, die noch immer die RDTSC-Anweisung verwenden, müssen aktualisiert werden. Siehe Zeitliche Steuerung von Spielen und Multi-Core-Prozessoren.

Mein Spielcode basiert auf D3DX und DXUT. Gibt es irgendetwas, das ich zum Migrieren des Codes verwenden kann?

Das Communityprojekt DirectX-Toolkit (DirectXTK) bietet Hilfsklassen zur Verwendung mit Direct3D 11.

Gewusst wie Codepfade für den Desktop und den Microsoft Store verwalten?

Chuck Walbourns Artikelreihe mit dem Titel Dual-use Coding Techniques for Games bietet Anleitungen zum Freigeben von Code zwischen dem Desktop und den Microsoft Store-Codepfaden.

Wie lade ich Bildressourcen in meine DirectX-UWP-App?

Zum Laden von Bildern sind zwei API-Pfade verfügbar:

Sie können auch den DDSTextureLoader und den WICTextureLoader aus DirectXTK oder DirectXTex verwenden.

Wo finde ich das DirectX SDK?

Das DirectX SDK ist im Windows SDK enthalten. Das neueste DirectX SDK, das vom Windows SDK getrennt war, wurde im Juni 2010 veröffentlicht. Direct3D-Beispiele sind wie die anderen Windows-App-Beispiele in der Codegalerie enthalten.

Was ist mit verteilbaren DirectX-Komponenten?

Der Großteil der Komponenten im Windows SDK ist bereits in unterstützten Versionen des Betriebssystems enthalten oder verfügt nicht über eine DLL-Komponente (z. B. DirectXMath). Alle Direct3D-API-Komponenten, die von UWP-Apps verwendet werden können, werden bereits für Ihr Spiel verfügbar sein. Sie müssen sie nicht neu verteilen.

Win32-Desktopanwendungen verwenden weiterhin DirectSetup. Wenn Sie die Desktopversion Ihres Spiels aktualisieren, gehen Sie daher wie unter Direct3D 11-Bereitstellung für Spielentwickler beschrieben vor.

Kann ich meinen Desktopcode vor der Umstellung von Effects auf DirectX 11 aktualisieren?

Siehe Effects für Direct3D 11-Update. Mit Effects 11 können Abhängigkeiten von älteren DirectX-SDK-Headern entfernt werden. Es ist als Portierungshilfsmittel vorgesehen und kann nur für Desktop-Apps verwendet werden.

Gibt es einen Pfad für die Portierung meines DirectX 8-Spiels zu UWP?

Yes:

Kann ich mein DirectX 10- oder 11-Spiel zu UWP portieren?

DirectX 10.x- und 11-Desktopspiele können ohne großen Aufwand zu UWP portiert werden. Siehe Migrieren zu Direct3D 11.

Wie wähle ich bei einem Multi-Monitor-System das richtige Anzeigegerät aus?

Der Benutzer wählt aus, auf welchem Monitor Ihre App angezeigt wird. Rufen Sie D3D11CreateDevice auf, und legen Sie den ersten Parameter auf nullptr fest, damit Windows den korrekten Adapter auswählt. Rufen Sie anschließend die IDXGIDevice interface des Geräts ab, rufen Sie GetAdapter auf, und erstellen Sie die Swapchain mit dem DXGI-Adapter.

Wie aktiviere ich Antialiasing?

Antialiasing (Multisampling) wird beim Erstellen des Direct3D-Geräts aktiviert. Enumerate multisampling support by call CheckMultisampleQualityLevels and then set multisample options in the DXGI_SAMPLE_DESC structure when you call CreateSurface.

Mein Spiel rendert mit Multithreading und/oder verzögertem Rendering. Was muss ich in diesem Zusammenhang bei Direct3D 11 beachten?

Lesen Sie Einführung in das Multithreading in Direct3D 11. Dort werden die ersten Schritte erläutert. Eine Liste der wichtigsten Unterschiede finden Sie unter Unterschiede beim Threading zwischen Direct3D-Versionen. Beachten Sie, dass beim verzögerten Rendering ein verzögerter Gerätekontext anstelle eines unmittelbaren Kontextes verwendet wird.

Wo finde ich weitere Informationen zur programmierbaren Pipeline seit Direct3D 9?

Was sollte ich anstelle des X-Dateiformats für meine Modelle verwenden?

Obwohl wir keinen offiziellen Ersatz für das X-Dateiformat haben, verwenden viele der Beispiele das SDKMesh-Format. Visual Studio bietet außerdem eine Inhaltspipeline, die verschiedene gängige Formate in CMO-Dateien kompiliert, die mit Code aus dem Visual Studio 3D-Starter Kit oder mit dem DirectXTK geladen werden können.

Wie debugge ich meine Shader?

Microsoft Visual Studio enthält Diagnosetools für DirectX-Grafiken. Siehe Debuggen von DirectX-Grafiken.

Was ist das Direct3D 11-Äquivalent für die x-Funktion?

Informationen hierzu finden Sie in der Funktionszuordnung in „Zuordnung von DirectX 9-Features zu DirectX 11-APIs“.

Was ist das DXGI\_FORMAT-Äquivalent des y-Oberflächenformats?

Informationen hierzu finden Sie in der Oberflächenformatzuordnung in „Zuordnung von DirectX 9-Funktionen zu DirectX 11-APIs“.