Почему вершинные входные параметры в Direct3D 11 используют формат DXGI - PullRequest
0 голосов
/ 06 апреля 2020

Когда-то я изучал Direct3D 11 go, я переключился с DX9 на DX11, потому что он имеет больше функций. Но я не могу объяснить, почему формат макета входной вершины использует форматы DXGI, такие как

polygonLayout.Format = DXGI_FORMAT_R32G32B32_FLOAT; //For position i don't need color

В Direct3D9 было проще использовать D3DVERTEXELEMENT9:

D3DVERTEXELEMENT9 dwDecl3[] = 
{
    {0, 0,  D3DDECLTYPE_FLOAT3,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_POSITION, 0},
    {0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_COLOR, 0},
    {0, 16, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_COLOR, 1},
    {1,  0, D3DDECLTYPE_FLOAT2,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_TEXCOORD, 0},
    {2,  0, D3DDECLTYPE_FLOAT2,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_TEXCOORD, 1},
    D3DDECL_END()
};

1 Ответ

0 голосов
/ 07 апреля 2020

Это на самом деле не технический или программный вопрос, а скорее "почему они это сделали?" вопрос истории.

Итак ...

Первоначальная идея состояла в том, что когда Microsoft изменила Direct3D 7 с Direct3D 8 на Direct3D 9, код перечисления устройства / адаптера всегда менялся, хотя все это и делало тоже самое. Поэтому была реализована идея извлечения битов из Direct3D API, который выполнял перечисление устройства / адаптера, и, таким образом, Графическая инфраструктура DirectX (DXGI) была создана для удовлетворения этой потребности. Следовательно, почему перечисления, такие как пиксельные форматы, находятся в перечислениях DXGI_FORMAT_*, а не в перечислениях Direct3D.

План в то время заключался в том, что DXGI не нужно было менять, и что вы могли просто написать этот материал один раз, и он будет работать для Direct3D 10 и будущих версий DirectX.

Увы, «ни один план не выживает, контакт с врагом» и DXGI почти постоянно меняется с каждым изменением Direct3D и Windows OS.

DXGI 1.0      Windows Vista and Direct3D 10

DXGI 1.1      Windows 7 and Direct3D 11
              The "you really need to use DXGICreateFactory1" release
              Included BGR formats for D3D_FEATURE_LEVEL_9_x devices
              Included BC6/BC7 formats for D3D_FEATURE_LEVEL_11_0 devices

DXGI 1.2      Windows 8 and DirectX 11.1
              Windows Store apps and the "CoreWindow" swapchain
              Introduced the DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL flip model
              Included a bunch of new formats for DirectX 11 Video APIs
              Added 16bpp (5:5:5:1, 5:6:5, and 4:4:4:4) formats

DXGI 1.3      Windows 8.1 and DirectX 11.2
              Added DXGICreateFactory2 so you could enable DXGI Debugging

DXGI 1.4      Windows 10 and DirectX 11.3 / 12.0
              Introduced the DXGI_SWAP_EFFECT_FLIP_DISCARD flip model
              DirectX 12 requires  DXGI_SWAP_EFFECT_FLIP_* flip models
              Includes a few more video formats for JPEG hardware decoding support

DXGI 1.5      Windows 10 (15086) added DuplicateOutput1
              Support for Variable refresh rate displays
              (a.k.a. DXGI_PRESENT_ALLOW_TEARING)

DXGI 1.6      Windows 10 (15063) added support for HDR displays

              Windows 10 (16299) added support for some special adapter fences

              Windows 10 (17134) added the DXGI_GPU_PREFERENCE enumeration;
              Also added HDR10+ metadata support

              Windows 10 (17763) added a way to register for an event
              for adapter changes

См. Графическая инфраструктура DirectX (DXGI): рекомендации , DXGI Отладочное устройство и Для лучшей производительности используйте модель DXGI flip

...