2

バック バッファーのピクセル形式の概念については、少し理解しています。ただし、不明な形式と指定された形式の使用の違いは何ですか。

(DirectX 11) DXGI_FORMAT_UNKNOWN 対 DXGI_FORMAT_R8G8B8A8_UNORM

(DirectX 9) D3DFMT_UNKNOWN 対 D3DFMT_X8R8G8B8

不明なフォーマットにより、グラフィックス アダプタは最も適切なフォーマットまたは何かを選択できますか?

ありがとう!

編集:

DirectX 9 で不明な形式を試してみましたが、動作します。

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferWidth = 640;
d3dpp.hDeviceWindow = mHWnd;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.EnableAutoDepthStencil = TRUE;

DirectX 11 で不明な形式を試しましたが、動作しません:

DXGI_SWAP_CHAIN_DESC sd;
sd.BufferDesc.Width = 640;
sd.BufferDesc.Height = 480;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_UNKNOWN;
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 1;
sd.OutputWindow = mhMainWnd;
sd.Windowed = true;
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
sd.Flags = 0;
4

1 に答える 1

1

ウィンドウ モードで実行しています。DirectX9 ドキュメントから:

実際、ウィンドウ モードでは、D3DFMT_UNKNOWN を BackBufferFormat に指定できます。これにより、ランタイムは現在の表示モード形式を使用するようになり、GetDisplayMode を呼び出す必要がなくなります。

つまり、D3DFMT_UNKNOWN は単に「現在の表示設定を使用する」ことを意味します。DirectX 11 はそれをサポートしていないようで、そこにあるモード (およびスワップ チェーンの作成方法) に関するドキュメントはもう少し複雑です。実際の表示形式に関係なく、DirectX11 で BackBufferFormat を選択でき、変換が自動的に行われると思います。いずれにせよ、おそらくすべてのディスプレイの 99% が X8R8G8B8 形式に設定されていると思います。

于 2014-01-27T07:13:44.793 に答える