Planifiez votre portage DirectX
Résumé
- Planifiez votre portage DirectX
- Changements importants de Direct3D 9 à Direct3D 11
- Cartographie des fonctionnalités
Planifiez votre projet de portage de jeu de DirectX 9 vers DirectX 11 et plateforme Windows universelle (UWP) : mettez à niveau votre code graphique et placez votre jeu dans l’environnement Windows Runtime.
Planifier le portage du code graphique
Avant de commencer à porter votre jeu vers UWP, il est important de s’assurer que votre jeu n’a aucune conservation de Direct3D 8. Assurez-vous que votre jeu n’a aucun reste du pipeline de fonction fixe. Pour obtenir la liste complète des fonctionnalités déconseillées, y compris les fonctionnalités de pipeline fixe, consultez Fonctionnalités déconseillées.
La mise à niveau de Direct3D 9 vers Direct3D 11 est supérieure à une modification de recherche et de remplacement. Vous devez connaître la différence entre l’appareil Direct3D, le contexte de l’appareil et l’infrastructure graphique, et découvrir d’autres modifications importantes depuis Direct3D 9. Vous pouvez démarrer ce processus en lisant les autres rubriques de cette section.
Vous devez remplacer les bibliothèques d’assistance D3DX et DXUT par vos propres bibliothèques d’assistance ou par des outils de communauté. Pour plus d’informations, consultez la section Mappage des fonctionnalités.
Notez que vous pouvez utiliser le Kit d’outils DirectX ou DirectXTex pour remplacer certaines fonctionnalités précédemment fournies par D3DX et DXUT.
Les nuanceurs écrits dans le langage d’assembly doivent être mis à niveau vers HLSL à l’aide du modèle de nuanceur 4 niveau 9_1 ou 9_3, et les nuanceurs écrits pour la bibliothèque Effets doivent être mis à jour vers une version plus récente de la syntaxe HLSL. Pour plus d’informations, consultez la section Mappage des fonctionnalités.
Familiarisez-vous avec les différents niveaux de fonctionnalités Direct3D. Les niveaux de fonctionnalité classifient un large éventail de matériel vidéo en définissant des ensembles de fonctionnalités connues. Chaque ensemble correspond approximativement aux versions de Direct3D, de 9.1 à 11.2. Tous les niveaux de fonctionnalités utilisent l’API DirectX 11.
Planifier le portage du code de l’interface utilisateur Win32 vers CoreWindow
Les applications UWP s’exécutent dans une fenêtre créée pour un conteneur d’application, appelée CoreWindow. Votre jeu contrôle la fenêtre en hériter d’IFrameworkView, ce qui nécessite moins de détails d’implémentation qu’une fenêtre de bureau. La boucle principale de votre jeu se trouve dans la méthode IFrameworkView ::Run.
Le cycle de vie d’une application UWP est très différent d’une application de bureau. Vous devrez souvent enregistrer le jeu, car lorsqu’un événement de suspension se produit, votre application n’a qu’un temps limité pour arrêter l’exécution du code et vous souhaitez vous assurer que le joueur peut revenir à l’endroit où il était immédiatement lorsque votre application reprend. Les jeux doivent économiser juste assez souvent pour maintenir une expérience de jeu continue à partir de la reprise, mais pas si souvent que le jeu enregistre la fréquence d’impact ou cause le jeu à stutter. Votre jeu devra éventuellement charger l’état du jeu lorsque le jeu reprend à partir d’un état arrêté.
DirectXMath peut être utilisé comme remplacement de D3DXMath et XNAMath, et il peut être utile si vous avez besoin d’une bibliothèque mathématique. DirectXMath dispose de types de données rapides, portables et de types alignés et emballés pour une utilisation avec des nuanceurs.
Des bibliothèques natives telles que l’API interblocée ont été développées pour prendre en charge les intrinsèques Arm. Si votre jeu utilise des API verrouillées, vous pouvez les utiliser dans DirectX 11 et UWP.
Nos modèles et exemples de code utilisent de nouvelles fonctionnalités C++ que vous ne connaissez peut-être pas encore. 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.
Il existe deux concepts que vous utiliserez souvent :
- Les références managées (opérateur^) et les classes managées (classes ref) font partie intégrante de Windows Runtime. Vous devez utiliser des classes ref managées pour interagir avec les composants Windows Runtime, par exemple IFrameworkView (en savoir plus sur cette procédure pas à pas).
- Lorsque vous utilisez des interfaces COM Direct3D 11, utilisez le type de modèle Microsoft ::WRL ::ComPtr pour faciliter l’utilisation des pointeurs COM.