1

私はDirectX11の初心者であり、 『Beginning DirectX 11』の第2章に続いて、次のコードを使用してバッファーを作成するためのコードがあります。

DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory( &swapChainDesc, sizeof( swapChainDesc ) );
swapChainDesc.BufferCount = 1;
swapChainDesc.BufferDesc.Width = width;
swapChainDesc.BufferDesc.Height = height;
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.OutputWindow = hwnd;
swapChainDesc.Windowed = true;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0;

私の質問は、スワップチェーンの説明では、BufferDesc(DXGI_MODE_DESC構造体)が1つしかないため、明らかに1つのバッファーだけのスペースがあるということです。では、BufferCountが2以上に設定されている場合、2番目のバッファーはどのように登録されますか?別のDXGI_SWAP_CHAIN_DESCを使用していますか?いくつかのサンプルコードを投稿してください。

また、BufferCountのタイプはUNITです。これは、3つ以上のバッファーを追加できることを意味します。ダブルバッファリング手法では2つのバッファが使用されますが、1つのバッファは描画に使用され、もう1つのバッファはシーンに表示するために使用され、バッファが交換されます。3つ以上のバッファーの用途と利点は何ですか?

4

1 に答える 1

3

より多くのバッファを持つことは、一般的に速度の向上を意味します。バッファがスワッピングしているときは、どのバッファに対してもレンダリングを行うことはできません。それらが完全に交換されるまで待つ必要があります。これには、別のフレームのレンダリングに使用できたはずの時間がかかる場合があります。トリプルバッファリングはまさにこれです。立体視的な作業を行う場合は、最大4(6?)のバッファーを使用できます。これ以上は役に立たないでしょう。

しばらくDXを手に入れていませんが、swapChainDesc.BufferCountが値に設定されていると、DXが自動的に処理されることを覚えています。また、これは第2章にすぎないことはわかっていますが、2つのバッファーを使用してください。彼らが何を言っても、コードは変更されず、速度が向上します。とにかく、2つのバッファーを使用することをお勧めします。次のVBlankで唯一のバッファを完全にレンダリングできない場合はどうなりますか?おっと、画像がありません。

于 2011-10-07T19:46:36.023 に答える