Planifier votre portage DirectXPlan your DirectX port

RésuméSummary

Planifiez le portage de votre jeu DirectX 9 sur DirectX 11 et la plateforme Windows universelle (UWP) : mettez à niveau votre code graphique et préparez votre jeu pour l’environnement Windows Runtime.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.

Planifier le portage du code graphiquePlan to port graphics code

Avant de commencer le portage de votre jeu sur WPU, il est essentiel de vous assurer que ce jeu ne comporte plus d’éléments issus de Direct3D 8.Before you begin porting your game to UWP, it's important to ensure that your game does not have any holdovers from Direct3D 8. Vérifiez notamment que votre jeu ne contient plus de références au pipeline de fonctions fixes.Ensure that your game doesn't have any remnants of the fixed function pipeline. Pour obtenir la liste complète des fonctionnalités déconseillées, y compris le pipeline de fonctions fixes, voir Fonctionnalités déconseillées.For a complete list of deprecated features, including fixed pipeline functionality, see Deprecated Features.

La mise à niveau de Direct3D 9 vers Direct3D 11 ne se limite pas à une simple opération de recherche et remplacement.Upgrading from Direct3D 9 to Direct3D 11 is more than a search-and-replace change. Vous devez savoir en quoi diffèrent ces versions sur le plan du périphérique Direct3D, du contexte de périphérique et de l’infrastructure graphique, mais aussi vous documenter sur les autres modifications majeures qui ont été apportées depuis la version Direct3D 9.You need to know the difference between the Direct3D device, device context, and graphics infrastructure, and learn about other important changes since Direct3D 9. Dans cette optique, nous vous recommandons de commencer par lire les autres rubriques de cette section.You can start this process by reading the other topics in this section.

Vous devez remplacer les bibliothèques d’applications auxiliaires D3DX et DXUT par vos propres bibliothèques d’applications auxiliaires ou par des outils de la communauté.You must replace the D3DX and DXUT helper libraries with your own helper libraries, or with community tools. Pour plus d’informations, voir la section Mappage des fonctionnalités.See the Feature mapping section for more info.

Remarque    Vous pouvez utiliser le Kit d’outils DirectX ou DirectXTex pour remplacer certaines fonctionnalités précédemment fournies par D3DX et DXUT.Note   You can use the DirectX Tool Kit or DirectXTex to replace some functionality that was formerly provided by D3DX and DXUT.

 

Les nuanceurs écrits en langage assembleur doivent être mis à niveau vers HLSL à l’aide des fonctionnalités de nuanceur modèle 4 de niveau 9 _ 1 ou 9 _ 3, et les nuanceurs écrits pour la bibliothèque d’effets devront être mis à jour vers une version plus récente de la syntaxe HLSL.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. Pour plus d’informations, voir la section Mappage des fonctionnalités.See the Feature mapping section for more info.

Familiarisez-vous avec les différents niveaux de fonctionnalité Direct3D.Get familiar with the different Direct3D feature levels. Ces niveaux de fonctionnalité permettent de classer les divers matériels vidéo selon des ensembles définis de fonctionnalités prises en charge.Feature levels classify a wide range of video hardware by defining sets of known functionality. Chaque ensemble correspond globalement à une version de Direct3D (versions 9.1 à 11.2).Each set roughly corresponds to versions of Direct3D, from 9.1 through 11.2. Tous les niveaux de fonctionnalité s’appliquent à l’API DirectX 11.All feature levels use the DirectX 11 API.

Planifier le portage du code d’interface utilisateur Win32 sur CoreWindowPlan to port Win32 UI code to CoreWindow

Les applications UWP s’exécutent dans une fenêtre créée pour un conteneur d’application, appelée CoreWindow.UWP apps run in a window created for an app container, called a CoreWindow. Votre jeu contrôle la fenêtre en héritant de IFrameworkView, ce qui nécessite moins de détails d’implémentation qu’une fenêtre de bureau.Your game controls the window by inheriting from IFrameworkView, which requires less implementation details than a desktop window. La boucle principale de votre jeu sera définie dans la méthode IFrameworkView::Run.Your game's main loop will be in the IFrameworkView::Run method.

Le cycle de vie d’une application UWP diffère de celui d’une application de bureau.The lifecycle of a UWP app is very different from a desktop app. Vous devez prévoir des enregistrements fréquents du jeu. En effet, durant le déclenchement d’un événement de suspension, votre application ne dispose que d’un court délai pour arrêter l’exécution du code, et vous voulez vous assurer que le joueur pourra revenir à l’endroit du jeu où il était initialement aussitôt après la reprise de l’application.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. Vous devez enregistrer votre jeu aussi souvent que nécessaire pour permettre au joueur de continuer sa partie normalement après la reprise, tout en limitant le nombre d’enregistrements afin de ne pas dégrader la fréquence d’images ni provoquer d’interruption de son dans le jeu.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. Votre jeu aura peut-être besoin de charger son état lorsqu’il quittera l’état « arrêté ».Your game will potentially need to load game state when the game resumes from a terminated state.

DirectXMath peut avantageusement remplacer D3DXMath et XNAMath, en particulier si vous avez besoin d’une bibliothèque de fonctions mathématiques.DirectXMath can be used as a replacement for D3DXMath and XNAMath, and it can come in handy if you need a math library. DirectXMath fournit des types de données rapides et portables, ainsi que des types adaptés et groupés pour être utilisés avec des nuanceurs.DirectXMath has fast, portable data types, and types that are aligned and packed for use with shaders.

Les bibliothèques natives, telles que l’API Interlocked, ont été étendues afin de prendre en charge les intrinsèques ARM.Native libraries such as the Interlocked API have been expanded to support ARM intrinsics. Si votre jeu fait appel à des API à blocage, vous pouvez continuer à les utiliser dans DirectX 11 et UWP.If your game uses interlocked APIs, you can keep using them in DirectX 11 and UWP.

Nos modèles et exemples de code utilisent de nouvelles fonctionnalités C++ que vous ne connaissez peut-être pas encore.Our templates and code samples use new C++ features that you might not be familiar with yet. Par exemple, les méthodes asynchrones sont utilisées avec des expressions lambda pour charger des ressources Direct3D sans bloquer le thread d’interface utilisateur.For example, asynchronous methods are used with lambda expressions to load Direct3D resources without blocking the UI thread.

Les deux concepts suivants vous seront souvent utiles :There are two concepts you'll use often:

  • Les références managées (l’opérateur ^) et les classes managées (classes de référence) sont des éléments fondamentaux de Windows Runtime.Managed references (^ operator) and managed classes (ref classes) are a fundamental part of the Windows Runtime. Vous devrez utiliser des classes Ref managées pour l’interface avec les composants Windows Runtime, par exemple IFrameworkView (en savoir plus sur cela dans la procédure pas à pas).You will need to use managed ref classes to interface with Windows Runtime components, for example IFrameworkView (more on that in the walkthrough).
  • Lorsque vous travaillez avec des interfaces COM Direct3D 11, utilisez le type de modèle Microsoft :: WRL :: ComPtr pour faciliter l’utilisation des pointeurs com.When working with Direct3D 11 COM interfaces, use the Microsoft::WRL::ComPtr template type to make COM pointers easier to use.