まとめ
- DirectX の移植の計画
- Direct3D 9 から Direct3D 11 への重要な変更
- 機能のマッピング
DirectX 9 から DirectX 11 および ユニバーサル Windows プラットフォーム (UWP) へのゲーム 移植プロジェクトを計画します。グラフィックス コードをアップグレードし、ゲームをWindows ランタイム環境に配置します。
グラフィックス コードの移植を計画する
ゲームを UWP に移植する前に、ゲームに Direct3D 8 からのホールドオーバーがないことを確認することが重要です。 ゲームに固定関数パイプラインの残りの部分がないことを確認します。 修正されたパイプライン機能を含む非推奨の機能の完全な一覧については、「 Deprecated Features」を参照してください。
Direct3D 9 から Direct3D 11 へのアップグレードは、検索と置換の変更以上の変更です。 Direct3D デバイス、デバイス コンテキスト、グラフィックス インフラストラクチャの違いを把握し、Direct3D 9 以降のその他の重要な変更について学習する必要があります。 このプロセスは、このセクションの他のトピックを読んで開始できます。
D3DX および DXUT ヘルパー ライブラリは、独自のヘルパー ライブラリまたはコミュニティ ツールに置き換える必要があります。 詳細については、「 Feature マッピング 」セクションを参照してください。
注 DirectX Tool Kit または DirectXTex を使用すると、D3DX および DXUT で実現されていた機能の一部を置き換えることができます。
アセンブリ言語で記述されたシェーダーは、シェーダー モデル 4 レベル 9_1 または 9_3 の機能を使用する HLSL にアップグレードする必要があります。また、Effects ライブラリ向けに記述されたシェーダーは、より新しいバージョンの HLSL 構文に更新する必要があります。 詳細については、「 Feature マッピング 」セクションを参照してください。
さまざまな Direct3D 機能レベルについて理解します。 機能レベルは、既知の機能のセットを定義することによって、幅広いビデオ ハードウェアを分類します。 各セットは、9.1 から 11.2 までの Direct3D のバージョンにほぼ対応しています。 すべての機能レベルで 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 式と共に使用され UI スレッドをブロックせずに Direct3D リソースを読み込みます。
よく使用する概念は 2 つあります。
- マネージド参照 (^ 演算子) と管理されたクラス (ref クラス) は、Windows ランタイムの基本的な部分です。 マネージド ref クラスを使用して、Windows ランタイム コンポーネント (例: IFrameworkView (チュートリアルの詳細) とインターフェイスする必要があります。
- Direct3D 11 COM インターフェイスを使用する場合は、 Microsoft::WRL::ComPtr テンプレート型を使用して、COM ポインターを使いやすくします。