DirectX11の初期化

初期化で生成されるオブジェクト

D3D11CreateDeviceAndSwapChainでは下記を生成しています。

ID3D11Device DirectX11の機能にアクセスするためのデバイス
このデバイスから描画に必要なオブジェクトの生成などを行います。
ID3D11DeviceContect DirectX11では描画処理がこちらのデバイスコンテキストで行う形になっています。
このオブジェクトで描画コマンドの生成や発行を管理します。又、ImmediateとDeferredの2種類のコンテキストが存在します。
D3D11CreateDeviceAndSwapChainで生成されるのはImmediateです。Immediateではコマンドの生成からGPUへの発行まで行います。Deferredは使用する際に別途作成する必要があります。
遅延という意味ですがコマンドのみを作成してImmediateで作成したコマンドを後から実行することが可能です。これにより複数スレッドで並列して描画コマンドの生成などが可能になります。
IDXGISwapChain レンダリング結果を出力するためのオブジェクトです。
紐づいたビデオアダプタやウィンドウに対してレンダリング結果を出力します。

これらのオブジェクトを生成するところからDirectX11の実装が始まります。
それでは生成する際に使用した情報を見ていきましょう。

 

DXGI_SWAP_CHAIN_DESC
BufferDesc バックバッファの設定です。
バッファのサイズやフォーマット。
そしてリフレッシュレートなどが指定できます。
BufferSampleDesc MSAAを適応するための設定を行います。
ハードウェアに応じて使用できる品質が異なります。
なので使用する場合はデバイスで使用可能な性能を調べてから設定します。
BufferUsage バッファの使用用途を設定します。
今回はシェーダからの出力先として使用するの下記を指定します。
DXGI_USAGE_RENDER_TARGET_OUTPUT
BufferCount バックバッファの数
OutputWindow 出力先のウィンドウハンドル
Windowed ウィンドウモードで初期化するか?
falseにするとフルスクリーンモードとなります。
SwapEffect フロントバッファとバックバッファの入れ替え方法を設定できます。
詳細はDXGI_SWAP_EFFECTを確認してください。
Flags スワップチェインの設定フラグを指定します。
詳細はDXGI_SWAP_CHAIN_FLAGを確認してください。

スワップチェインの生成に使用する設定は以上です。
DirectX9の頃と同じような内容です。
ただリフレッシュレートが細かく設定できるようになっています。

 

D3D11CreateDeviceAndSwapChain
pAdapter 使用するビデオアダプタの設定します。
※nullptrで規定のアダプタを使用
DriverType ドライバタイプの設定します。
基本的にハードウェア(D3D11_DRIVER_TYPE_HARDWEAR)を指定します。
Software D3D_DRIVER_TYPE_SOFTWAREを指定した際に使用するモジュールを設定します。
Flags 使用するフラグの設定します。
詳細はD3D11_CREATE_DEVICEを確認してください。
pFeatureLevels 使用したい機能レベル(D3D_FEATURE_LEVEL)を指定できます。
指定した内容の上から順に初期化できるか実行されます。
nullptrの場合は使用可能な最高レベルが使用されます。
FeatureLevels 上記で指定した機能レベルの要素数
SDKVersion SDKのバージョン指定します。
必ずD3D11_SDK_VERSIONとなります。
pSwapChainDesc 生成するSwapChainの設定です。
ppSwapChain 生成したSwapChainの格納アドレスです。
ppDevice 生成したDeviceの格納アドレスです。
pFeatureLevel 生成に成功した機能レベルです。
ppImmediateContext 生成したDeviceContectの格納アドレスです。

DirectX11を初期化するにはドライバタイプや機能レベルを指定してデバイスを生成します。
DirectX11となっていますが、実際にはDirectX10やDirectX9に制限をかけた状態で生成することもできます。

基本的にDirectX11が動作しない環境のための対処ですが、
最近のPCは基本的にDirectX11で動作するのでそこまで対応する必要があるかは考えものです。

今回についてはDirectX11.0のみでチェックして初期化するようにしています。

 

サンプルプログラム

今回のDirectX11の初期化はここまでです。
最初に記述したように割愛した部分も含めたサンプルコードをアップロードしているので必要に応じて参考にしてください。

Download

1 2 3

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です