DirectX 11 の移植に関する FAQ

ユニバーサル Windows プラットフォーム (UWP) へのゲームの移植についてよく寄せられる質問に対してお答えします。

ゲームの移植作業は、API メソッドを検索して置き換える作業になりますか。それとも、より慎重な移植プロセスを計画する必要がありますか。

Direct3D 11 は Direct3D 9 からの大幅なアップグレードです。 仮想化されたグラフィックス アダプターとそのコンテキストのための独立した API や、デバイス リソースのポリモーフィズムの新しいレイヤーなど、いくつかのパラダイム シフトがあります。 ゲームでは、グラフィックス ハードウェアを実質的に同じ方法で使い続けることができますが、新しい Direct3D 11 API のアーキテクチャについて学び、正しい API コンポーネントが使われるようにグラフィックス コードの各部分を更新する必要があります。 「DirectX 9 からの DirectX 11 と Windows ストアへの移行」をご覧ください。

新しいデバイス コンテキストの用途は何ですか。 自分の Direct3D 9 デバイスを Direct3D 11 デバイスに置き換えたり、Direct3D 9 デバイス コンテキストを Direct3D 11 デバイス コンテキストに置き換えたりする必要はありますか。その両方が必要でしょうか。

Direct3D デバイスは、ビデオ メモリにリソースを作成するために使われます。一方、デバイス コンテキストは、パイプラインの状態を設定し、レンダリング コマンドを生成するために使われます。 詳しくは、「Direct3D 9 と Direct3D 11 の間の重要な変更点」をご覧ください。

UWP 向けのゲーム タイマーを更新する必要はありますか。

QueryPerformanceCounterQueryPerformanceFrequency は、引き続き UWP アプリのゲーム タイマーを実装する最適な手段です。

タイマーと UWP アプリのライフサイクルのニュアンスに注意する必要があります。 中断と再開は、プレーヤーによるデスクトップ ゲームの再起動とは異なります。ゲームでは、最後にプレイされていた時点のスナップショットを再開します。 数週間など、長時間経過した場合は、ゲーム タイマーの実装は適切に動作しない可能性があります。 ゲームの再開時にアプリのライフサイクル イベントを使ってタイマーをリセットできます。

まだ RDTSC 命令を使っているゲームはアップグレードする必要があります。 「ゲームのタイミングとマルチコア プロセッサ」をご覧ください。

自分のゲーム コードは D3DX と DXUT に基づいています。 コードの移植に役立つものはありますか。

DirectX ツール キット (DirectXTK) コミュニティのプロジェクトには、Direct3D 11 で利用できるヘルパー クラスが用意されています。

デスクトップと Microsoft Store のコード パスを維持する方法を教えてください。

Chuck Walbourn 氏によるゲームの二重用途のコーディング手法に関する記事シリーズで、デスクトップと Microsoft Store コード パスの間でコードを共有する方法のガイダンスが提供されています。

DirectX UWP アプリの画像リソースを読み込む方法を教えてください。

画像を読み込むための API パスは 2 つあります。

  • コンテンツ パイプラインは Direct3D のテクスチャ リソースとして使われる DDS ファイルに画像を変換します。 「ゲームまたはアプリケーションでの 3-D アセットの使用」をご覧ください。
  • Windows Imaging Component を使うと、さまざまな形式から画像を読み込むことができます。このコンポーネントは、Direct2D ビットマップや、Direct3D のテクスチャ リソースに使用できます。

DirectXTK または DirectXTex の DDSTextureLoader と WICTextureLoader を使うこともできます。

DirectX SDK の場所

DirectX SDK は Windows SDK に同梱されています。 Windows SDK に同梱されていない最新の DirectX SDK は、2010 年 6 月のものです。 Direct3D サンプルは、他の Windows アプリ サンプルと共にコード ギャラリーにあります。

DirectX の再頒布可能パッケージについて教えてください。

Windows SDK の大半のコンポーネントは、サポートされているバージョンの OS に含まれていますが、DLL コンポーネントは含まれていません (DirectXMath など)。 UWP アプリで使うことができるすべての Direct3D API コンポーネントは、ゲームで既に使用できる状態です。再頒布する必要はありません。

Win32 デスクトップ アプリケーションは引き続き DirectSetup を使います。そのため、ゲームのデスクトップ バージョンをアップグレードする場合は、「ゲーム開発者向けの Direct3D 11 の展開」をご覧ください。

Effects から離れる前にデスクトップ コードを DirectX 11 に更新する方法はありますか。

Direct3D 11 向けの Effects の更新に関するページをご覧ください。 Effects 11 は、レガシ DirectX SDK ヘッダーへの依存を排除します。移植のサポート用に作成されたものであり、デスクトップ アプリでのみ利用できます。

UWP に DirectX 8 ゲームを移植するためのパスはありますか。

Yes:

UWP に DirectX 10 または 11 ゲームを移植することはできますか。

DirectX 10.x と 11 のデスクトップ ゲームは、UWP に簡単に移植できます。 「Direct3D 11 への移行」をご覧ください。

マルチモニター システムで適切なディスプレイ デバイスを選ぶにはどうすればよいですか。

アプリを表示するモニターはユーザーが選びます。 最初のパラメーターを nullptr に設定して D3D11CreateDevice を呼び出すことで、Windows が正しいアダプターを提供できるようにしてください。 次にデバイスの IDXGIDevice interface を取得し、GetAdapter を呼び出して、DXGI アダプターを使ってスワップ チェーンを作成します。

アンチエイリアシングをオンにするにはどうすればよいですか。

Direct3D デバイスを作成するとアンチエイリアシング (マルチサンプリング) が有効になります。 CheckMultisampleQualityLevels を呼び出してマルチサンプリングのサポートを列挙し、CreateSurface を呼び出すときに DXGI_SAMPLE_DESC structure でマルチサンプリングのオプションを設定します。

自分のゲームでは、マルチスレッドや遅延レンダリングを使ってレンダリングを行います。 Direct3D 11 向けに何を把握しておく必要がありますか。

まず、「Direct3D 11 でのマルチスレッドの概要」をご覧ください。 主な違いの一覧については、「Direct3D のバージョン間におけるスレッドの違い」をご覧ください。 遅延レンダリングではイミディエイト コンテキストではなくデバイスの遅延コンテキストが使われることに注意してください。

Direct3D 9 以降のプログラム可能なパイプラインに関する詳しい情報はどこにありますか。

モデルには .x ファイル形式の代わりに何を使えばよいですか。

.x ファイル形式に代わる公式のファイル形式はありませんが、サンプルの多くで SDKMesh 形式を利用しています。 Visual Studio には、一般的な形式を CMO ファイルにコンパイルするコンテンツ パイプラインがあります。CMO ファイルは、Visual Studio 3D スターター キットのコードか、DirectXTK を使って読み込むことができます。

シェーダーをデバッグするにはどうしたらよいですか。

Microsoft Visual Studio には、DirectX グラフィックスの診断ツールが含まれています。 「DirectX グラフィックスのデバッグ」をご覧ください。

x 関数に相当する Direct3D 11 の要素は何ですか。

「DirectX 11 API への DirectX 9 の機能のマッピング」の「関数のマッピング」をご覧ください。

y サーフェス形式に相当する DXGI_FORMAT の要素は何ですか。

「DirectX 11 API への DirectX 9 の機能のマッピング」の「サーフェス形式のマッピング」をご覧ください。