Как выбрать форматы пикселей DirectX?

Я немного понимаю концепцию формата пикселя для заднего буфера.
Однако в чем разница между использованием неизвестного формата и указанного формата:

(В 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;

2

Решение

Вы работаете в оконном режиме. Из документов DirectX9:

Фактически, D3DFMT_UNKNOWN может быть указан для BackBufferFormat в оконном режиме. Это указывает среде выполнения использовать текущий формат режима отображения и устраняет необходимость вызова GetDisplayMode.

Таким образом, D3DFMT_UNKNOWN просто означает «использовать текущие настройки отображения». DirectX 11, кажется, не поддерживает это, и документация о режимах там (и как вы должны создать цепочку подкачки) немного сложнее. Я думаю, что вы можете выбрать свой BackBufferFormat в DirectX11 независимо от фактического формата отображения, и преобразование произойдет автоматически. Вероятно, 99% всех дисплеев сейчас настроены на формат X8R8G8B8 в любом случае, я полагаю.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]