Direct3D 12 プログラミング環境のセットアップ

Direct3D 12 の生産的な開発環境を構成するインストール、ツール、およびサポートされているライブラリについて説明します。

開発環境

Direct3D 12 のヘッダーとライブラリは、Windows 10 SDK の一部です。 Direct3D 12 を使用するために別途ダウンロードやインストールが必要になることはありません。

Windows 10 SDKソフトウェアとVisual Studioをインストールすると、Direct3D 12プログラミング環境のセットアップが完了します。 Visual Studio 2019 をお勧めするのは、D3D12 のグラフィックス デバッグ ツールが含まれるからですが、それよりも前のバージョンの Visual Studio もプログラム開発に使用できます。

Direct3D 12 API を使用するには、D3d12.h をインクルードして D3d12.lib にリンクするか、D3d12.dll の中のエントリ ポイントを直接照会します。

次のヘッダーとライブラリを使用できます。 スタティック ライブラリの場所は、コンピューターで実行されている Windows 10 のバージョン (32 ビットまたは 64 ビット) に依存します。

ヘッダーまたはライブラリ ファイル名 説明 インストールの場所
D3d12.h Direct3D 12 API ヘッダー %WindowsSdkDir\Include%WindowsSDKVersion%\\um
D3d12.lib スタティック Direct3D 12 API スタブ ライブラリ %WindowsSdkDir\Lib%WindowsSDKVersion%\\um\arch
D3d12.dll ダイナミック Direct3D 12 API ライブラリ %WINDIR%\System32
D3d12SDKLayers.h Direct3D 12 デバッグ ヘッダー %WindowsSdkDir\Include%WindowsSDKVersion%\\um
D3d12SDKLayers.dll ダイナミック Direct3D 12 デバッグ ライブラリ %WINDIR%\System32

サポートされている言語

C++ は、Direct3D 12 の開発でサポートされている唯一の言語であり、C# やその他の .NET 言語はサポートされていません。

ヘルパー構造体

多数のヘルパー構造体があり、これらは特に多数の D3D12 構造体の初期化を容易にします。 これらの構造体といくつかのユーティリティ関数が、ヘッダー D3dx12.h に存在します。 このヘッダーはオープン ソースで、必要に応じて開発者が変更できます。D3D12 ヘルパー ライブラリからダウンロードし、「Helper Structures and Functions for D3D12」(D3D12 のヘルパー構造体と関数) を参照してください。

メモリ管理ライブラリ

メモリ管理のヘルパー ライブラリをダウンロードしてアプリに統合すると、D3D11 のメモリ管理動作にさらに厳密に一致させることができます。 これは D3D11 スタイルの管理ライブラリであるため、このライブラリが最も役立つのはアプリで "コミット済みのリソース" スタイルの割り当て戦略をまだ使用している場合です。 具体的には、メモリの制約がある場合に (たとえば、ローエンドのメモリ カード、4K、ウルトラ設定など)、このライブラリを足がかりとして D3D11 の高性能メモリ管理にできる限り戻すことができます。 D3D12 の API によって実現する手法は、メモリ効率の点で D3D11 を上回りますが、このような手法は実装が難しく、時間もかかる可能性があります。

このライブラリはまだ作業中であり、今後変更される可能性があります。 次のリンクを使用してライブラリとサンプルにアクセスできます。

サポートされているツールとライブラリ

次のライブラリは、すべて Direct3D 12 で使用できます。

ライブラリ 目的 ドキュメント
DirectX 12 用 DirectX ツール キット Direct3D 12 C++ コードをユニバーサル Windows プラットフォーム (UWP) アプリ、Windows 10 用の Win32 デスクトップ アプリケーション、および Xbox One 専用アプリ用に書くための、多数のヘルパー クラスを集めたものです。 DirectX12TK wiki
DirectXTex DDS ファイルの読み取りと書き込みのほか、さまざまなテクスチャ コンテンツ処理操作の実行に使用します。たとえば、サイズ変更、形式変換、MIP マップ生成、ブロック圧縮を Direct3D ランタイム テクスチャ リソースに対して行うことや、高さマップから法線マップへの変換を行うことができます。 DirectXTex wiki
DirectXMesh さまざまなジオメトリ コンテンツ処理操作の実行に使用します。たとえば、法線と接線のフレームの生成、三角形の隣接の計算、頂点のキャッシュの最適化などです。 DirectXMesh wiki
DirectXMath ベクトル、スカラー、行列、四元数などの多数の数学演算をサポートする、多数のヘルパー クラスとメソッドです。 MSDN の DirectXMath ドキュメント
UVAtlas isochart テクスチャ アトラスを作成してパッケージ化するときに使用します。 UVAtlas wiki

 

サンプル

実用的な D3D12 サンプルの一覧と、各サンプルの場所と実行方法の説明については、「実用的なサンプル」を参照してください。

特定の機能を有効にするコードを追加する方法のチュートリアルについては、「D3D12 コードのチュートリアル」を参照してください。

デバッグ レイヤー

デバッグ レイヤーは、パラメーターと整合性に関して広範な追加の検証を行うためのものです (たとえばシェーダー リンケージとリソースのバインドの検証、パラメーターの整合性の検証、エラーの説明のレポート)。

Note

Windows 10 の場合、デバッグレイヤをサポートするデバイスを作成するには、「グラフィックスツール」オプション機能を有効にします。 Windows 1022H2の「システム」の下にある「設定」パネルに移動します。 以前のバージョンのWindows 10では、アプリの>アプリ&機能の下にある設定パネルに移動します。 「オプション機能」>「機能を追加」に移動し、「グラフィックスツール」を探します。

デバッグ レイヤーをサポートするのに必要なヘッダー D3D12SDKLayers.h は、既定で d3d12.h からインクルードされます。

デバッグ レイヤーによってメモリ リークがリストされると、オブジェクト インターフェイス ポインターのリストがフレンドリ名とともに出力されます。 既定のフレンドリ名は "<unnamed>" です。 フレンドリ名は、ID3D12Object::SetName メソッドを使用して設定できます。 一般的に、このような呼び出しは本番バージョンのコンパイル時に除外してください。

デバッグ レイヤーを使用してアプリをデバッグし、エラーや警告がないことを確認することをお勧めします。 デバッグ レイヤーは、Direct3D 12 のコードを書くのに役立ちます。 また、デバッグ レイヤーは開発者の生産性も高めます。はっきりしないレンダリング エラーや、黒い画面でさえも、その原因をすぐにソースで突き止めることができるからです。 デバッグ レイヤーは、さまざまな問題について警告します。 次に例を示します。

  • テクスチャを設定し忘れたが、ピクセル シェーダーでテクスチャから読み取る。
  • 深度を出力するが、深度ステンシル状態がバインドされていない。
  • テクスチャの作成が INVALIDARG で失敗した。

コンパイラ定義のD3DCOMPILE_DEBUGを設定して、HLSLコンパイラにデバッグ情報をシェーダブロブに含めるように指示します。

#define D3DCOMPILE_DEBUG 1

すべてのデバッグ インターフェイスおよびメソッドの詳細については、「Debug Layer Reference」(デバッグ レイヤー リファレンス) を参照してください。

デバッグ レイヤーの使用方法の概要については、「Understanding the D3D12 Debug Layer」(D3D12 デバッグ レイヤーとは) を参照してください。

学習に役立つビデオ

Direct3D 12 と Windows 10 に関連する多数のビデオが DirectX の高度な学習ビデオ チュートリアルにあります。この中に、グラフィックス デバッグ ツールやグラフィックス バグのレポートに関するビデオもあります。

Direct3D 12 とは