规划 DirectX 移植

总结

规划从 DirectX 9 移植到 DirectX 11 和 通用 Windows 平台(UWP)的游戏移植项目:升级图形代码,并将游戏置于Windows 运行时环境中。

计划移植图形代码

在开始将游戏移植到 UWP 之前,请务必确保游戏没有 Direct3D 8 中的任何保留。 确保游戏没有任何固定函数管道的残余。 有关已弃用功能的完整列表,包括固定管道功能,请参阅 已弃用的功能

从 Direct3D 9 升级到 Direct3D 11 不仅仅是搜索和替换更改。 你需要了解 Direct3D 设备、设备上下文和图形基础结构之间的差异,并了解 Direct3D 9 以来的其他重要更改。 可以通过阅读本部分中的其他主题来启动此过程。

必须将 D3DX 和 DXUT 帮助程序库替换为自己的帮助程序库,或者替换为社区工具。 有关详细信息, 请参阅功能映射 部分。

请注意可以使用 DirectX 工具包DirectXTex 替换以前由 D3DX 和 DXUT 提供的某些功能。

 

应该使用着色器模型 4 级别 9_1 或 9_3 功能将采用汇编语言编写的着色器升级到 HLSL,并且需要将为“效果”库编写的着色器更新到较新版本的 HLSL 语法。 有关详细信息, 请参阅功能映射 部分。

熟悉不同的 Direct3D 功能级别。 功能级别通过定义已知功能集对各种视频硬件进行分类。 每个集大致对应于从 9.1 到 11.2 的 Direct3D 版本。 所有功能级别都使用 DirectX 11 API。

计划将 Win32 UI 代码移植到 CoreWindow

UWP 应用在为应用容器创建的窗口中运行,称为 CoreWindow 游戏通过继承 IFrameworkView 来控制窗口,这需要比桌面窗口更少的实现详细信息。 游戏的主循环将位于 IFrameworkView::Run 方法中

UWP 应用的生命周期与桌面应用大相径庭。 你需要经常保存游戏,因为当暂停事件发生时,你的应用只有有限的时间来停止运行代码,并且你希望确保玩家可以在应用恢复时立即返回到它们的位置。 游戏应该保存得足够频繁,以便从简历中保持连续游戏体验,但游戏不会如此频繁地保存影响帧率或导致游戏口吃。 当游戏从终止状态恢复时,你的游戏可能需要加载游戏状态。

DirectXMath 可用作 D3DXMath 和 XNAMath 的替代,如果需要数学库,它可能会派上用场。 DirectXMath 具有快速、可移植的数据类型和类型,这些数据类型经过对齐和打包,以便与着色器一起使用。

已扩展本机库(如 互锁 API ),以支持 Arm 内部函数。 如果你的游戏使用联锁 API,则可以在 DirectX 11 和 UWP 中继续使用它们。

我们的模板和代码示例使用你可能不熟悉的新C++功能。 例如,异步方法与 lambda 表达式一起使用来加载 Direct3D 资源,而不会阻止 UI 线程。

通常使用两个概念:

  • 托管引用(^ 运算符)和托管类(ref 类)是Windows 运行时的基本部分。 需要使用托管 ref 类来与Windows 运行时组件进行交互,例如 IFrameworkView(本演练中的更多内容)。
  • 使用 Direct3D 11 COM 接口时,请使用 Microsoft::WRL::ComPtr 模板类型使 COM 指针更易于使用。