SwapChainの初期化
SwapChainとはレンダリング結果を出力するためのオブジェクトです。
紐づいたビデオアダプタやウィンドウに対してレンダリング結果を出力します。
DXGI_SWAP_CHAIN_DESC1 swapChainDesc{};
swapChainDesc.BufferCount = FrameCount;
swapChainDesc.Width = width;
swapChainDesc.Height = height;
swapChainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
swapChainDesc.SampleDesc.Count = 1;
ComPtr<IDXGISwapChain1> pSwapChain;
if (FAILED(pFactory->CreateSwapChainForHwnd(
pCommandQueue.Get(),
hWnd, // 表示するウィンドウのハンドル
&swapChainDesc,
nullptr,
nullptr,
&pSwapChain
)))
{
return false;
}
これでSwapChainが作成できます。
細かな設定は次の通りです。
DXGI_SWAP_CHAIN_DESC1
Width | バックバッファの幅 |
---|---|
Height | バックバッファの高さ |
Format | バックバッファのフォーマット |
Stereo | 立体視の有無を指定します。 |
SampleDesc | MSAAを適応するための設定を行います。 ハードウェアに応じて使用できる品質が異なります。 なので使用する場合はデバイスで使用可能な性能を調べてから設定します。 |
BufferUsage | バッファの使用用途を設定します。 今回はシェーダからの出力先として使用するの下記を指定します。 DXGI_USAGE_RENDER_TARGET_OUTPUT |
BufferCount | バックバッファの数 |
Scaling | バッファのスケーリング方法を設定します。 詳細はDXGI_SCALINGを確認してください。 |
SwapEffect | フロントバッファとバックバッファの入れ替え方法を設定できます。 詳細はDXGI_SWAP_EFFECTを確認してください。 |
AlphaMode | フレームバッファのα地の扱いを指定できます。 詳細はDXGI_ALPHA_MODEを確認してください。 |
Flags | スワップチェインの設定フラグを指定します。 詳細はDXGI_SWAP_CHAIN_FLAGを確認してください。 |
今回の記事に記載した一通りを実装すれば、先ずはDirectX12の実装を進めていく準備ができます。
画面に絵を出すにはまだ少し先が長いので、気長に付き合っていただければと思います。
サンプルプログラム
今回のDirectX12の初期化を行ったプロジェクトをアップしています。
必要に応じて参考にしてください。