規劃 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 功能層級。 功能層級藉由定義一組已知的功能來分類各種視訊硬體。 每組大致對應於 Direct3D 版本,從 9.1 到 11.2。 所有功能層級都會使用 DirectX 11 API。

規劃將 Win32 UI 程式碼移植到 CoreWindow

UWP 應用程式在為應用程式容器建立的視窗中執行,稱為 CoreWindow。 您的遊戲會透過繼承 IFrameworkView 來控制視窗,這比桌面視窗需要更少的實作細節。 您的遊戲的主迴圈將位於 IFrameworkView::Run 方法中。

UWP 應用程式的生命週期與傳統型應用程式非常不同。 您將需要經常儲存遊戲,因為當暫停事件發生時,您的應用程式只有有限的時間來停止執行程式碼,而且您想要確定玩家可以在應用程式繼續時立即回到他們的位置。 遊戲的儲存頻率應足以維持恢復後的連續遊戲體驗,但儲存頻率不應太高,否則會影響遊戲畫面播放速率或導致遊戲卡頓。 當遊戲從終止狀態恢復時,您的遊戲可能需要載入遊戲狀態。

DirectXMath 可用做 D3DXMath 和 XNAMath 的替代品,如果您需要數學程式庫,它可以派上用場。 DirectXMath 具有快速、可攜式資料類型,以及對齊並封裝以搭配著色器使用的類型。

Interlocked API 等原生程式庫已擴展為支援 Arm 內在函式。 如果您的遊戲使用相互鎖定的 API,您可以在 DirectX 11 和 UWP 中繼續使用它們。

我們的範本和程式碼範例使用您可能還不熟悉的新 C++ 功能。 例如,非同步方法與 lambda 運算式一起使用來載入 Direct3D 資源,而不會阻塞 UI 執行緒。

您通常會使用兩個概念:

  • 受管理的參考 (^ 運算子) 和受管理的類別 (ref 類別) 是 Windows 執行階段的基本部分。 您將需要使用受管理的 ref 類別來與 Windows 執行階段元件的介面互動,例如 IFrameworkView (逐步解說中將詳細介紹)。
  • 使用 Direct3D 11 COM 介面時,請使用 Microsoft::WRL::ComPtr 範本類型以使 COM 指標更易於使用。