Planen der DirectX-PortierungPlan your DirectX port

ZusammenfassungSummary

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.Plan your game porting project from DirectX 9 to DirectX 11 and Universal Windows Platform (UWP): upgrade your graphics code, and put your game in the Windows Runtime environment.

Planen der Portierung des GrafikcodesPlan to port graphics code

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.Before you begin porting your game to UWP, it's important to ensure that your game does not have any holdovers from Direct3D 8. Vergewissern Sie sich, dass im Spiel keine Reste der Pipeline mit festen Funktionen vorhanden sind.Ensure that your game doesn't have any remnants of the fixed function pipeline. Eine vollständige Liste der veralteten Features, einschließlich der Pipeline mit festen Funktionen, finden Sie unter Veraltete Features.For a complete list of deprecated features, including fixed pipeline functionality, see Deprecated Features.

Das Upgrade von Direct3D 9 auf Direct3D 11 ist mehr als nur ein Suchen-und-Ersetzen-Vorgang.Upgrading from Direct3D 9 to Direct3D 11 is more than a search-and-replace change. 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.You need to know the difference between the Direct3D device, device context, and graphics infrastructure, and learn about other important changes since Direct3D 9. Sie können damit beginnen, indem Sie sich die Informationen in den anderen Themen dieses Abschnitts durchlesen.You can start this process by reading the other topics in this section.

Ersetzen Sie die Hilfsbibliotheken D3DX und DXUT durch Ihre eigenen Hilfsbibliotheken oder durch Communitytools.You must replace the D3DX and DXUT helper libraries with your own helper libraries, or with community tools. Weitere Informationen finden Sie im Abschnitt Featurezuordnung.See the Feature mapping section for more info.

Hinweis    Sie können das DirectX-Toolkit oder directxtex verwenden, um einige Funktionen zu ersetzen, die zuvor von D3DX und dxut bereitgestellt wurden.Note   You can use the DirectX Tool Kit or DirectXTex to replace some functionality that was formerly provided by D3DX and DXUT.

 

Shader, die in der Assemblysprache geschrieben wurden, sollten mithilfe der Funktionen Shader Model 4 Level 9 _ 1 oder 9 3 auf HLSL _ aktualisiert werden, und für die Effects-Bibliothek geschriebene Shader müssen auf eine neuere Version der HLSL-Syntax aktualisiert werden.Shaders written in assembly language should be upgraded to HLSL using shader model 4 level 9_1 or 9_3 functionality, and shaders written for the Effects library will need to be updated to a more recent version of HLSL syntax. Weitere Informationen finden Sie im Abschnitt Featurezuordnung.See the Feature mapping section for more info.

Machen Sie sich mit den verschiedenen Direct3D-Featureebenen vertraut.Get familiar with the different Direct3D feature levels. Mithilfe von Featureebenen wird ein großer Bereich von Videohardware klassifiziert, indem Gruppen bekannter Funktionen definiert werden.Feature levels classify a wide range of video hardware by defining sets of known functionality. Jede Gruppe entspricht grob den Versionen von Direct3D, und zwar von 9.1 bis 11.2.Each set roughly corresponds to versions of Direct3D, from 9.1 through 11.2. Für alle Featureebenen wird die DirectX 11-API verwendet.All feature levels use the DirectX 11 API.

Planen der Portierung des Win32-UI-Codes zu CoreWindowPlan to port Win32 UI code to CoreWindow

UWP-Apps werden in einem Fenster ausgeführt, das für einen App-Container erstellt wurde. Dieses wird als CoreWindow bezeichnet.UWP apps run in a window created for an app container, called a CoreWindow. Das Spiel steuert das Fenster, indem es von IFrameworkView erbt. Dafür sind weniger Implementierungsdetails als für ein Desktopfenster erforderlich.Your game controls the window by inheriting from IFrameworkView, which requires less implementation details than a desktop window. Die Hauptschleife des Spiels befindet sich in der IFrameworkView::Run-Methode.Your game's main loop will be in the IFrameworkView::Run method.

Der Lebenszyklus einer UWP-App unterscheidet sich von dem einer Desktop-App.The lifecycle of a UWP app is very different from a 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.You'll need to save the game often, because when a suspend event happens your app only has a limited amount of time to stop running code, and you want to make sure the player can get back to where they were right away when your app resumes. 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.Games should save just often enough to maintain a continuous gameplay experience from resume, but not so often that the game saves impact framerate or cause the game to stutter. Wenn das Spiel nach einem Beendigungszustand fortgesetzt wird, muss möglicherweise der Spielstatus geladen werden.Your game will potentially need to load game state when the game resumes from a terminated state.

DirectXMath kann als Ersatz für D3DXMath und XNAMath verwendet werden, wenn Sie eine Mathematikbibliothek benötigen.DirectXMath can be used as a replacement for D3DXMath and XNAMath, and it can come in handy if you need a math library. DirectXMath verfügt über schnelle, portierbare Datentypen und Typen, die aufeinander abgestimmt und zur Verwendung mit Shadern als Paket vorhanden sind.DirectXMath has fast, portable data types, and types that are aligned and packed for use with shaders.

Systemeigene Bibliotheken wie Interlocked API wurden erweitert und unterstützen jetzt systeminterne ARM-Funktionen.Native libraries such as the Interlocked API have been expanded to support ARM intrinsics. Wenn in Ihrem Spiel miteinander verbundene APIs verwendet werden, können Sie diese unter DirectX 11 und UWP weiterhin verwenden.If your game uses interlocked APIs, you can keep using them in DirectX 11 and UWP.

In den Vorlagen und Codebeispielen von Microsoft werden neue C++-Features verwendet, die Sie möglicherweise noch nicht kennen.Our templates and code samples use new C++ features that you might not be familiar with yet. Beispielsweise werden asynchrone Methoden in Verbindung mit Lambda-Ausdrücken eingesetzt, um Direct3D-Ressourcen laden zu können, ohne den UI-Thread zu blockieren.For example, asynchronous methods are used with lambda expressions to load Direct3D resources without blocking the UI thread.

Zwei Konzepte werden Sie jedoch häufig anwenden:There are two concepts you'll use often:

  • Verwaltete Verweise (^ Operator) und verwaltete Klassen (Verweisklassen) sind wesentliche Bestandteile der Windows-Runtime.Managed references (^ operator) and managed classes (ref classes) are a fundamental part of the 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.You will need to use managed ref classes to interface with Windows Runtime components, for example IFrameworkView (more on that in the walkthrough).
  • Verwenden Sie beim Arbeiten mit Direct3D 11-COM-Schnittstellen den Microsoft::WRL::ComPtr-Vorlagetyp, um die Nutzung von COM-Zeigern zu vereinfachen.When working with Direct3D 11 COM interfaces, use the Microsoft::WRL::ComPtr template type to make COM pointers easier to use.