Prohodit řetězy
Prohození řetězů řídí otáčení zadní vyrovnávací paměti, které tvoří základ grafické animace.
Přehled
Programovací model pro prohození řetězců v Direct3D 12 není stejný jako v dřívějších verzích D3D. Programovací pohodlí, například podpora automatické obměna prostředků, která byla přítomna v D3D10 a D3D11, se už nepodporuje. Aplikace s podporou automatické rotace prostředků vykreslují stejný objekt rozhraní API, zatímco skutečná plocha vykreslovaná mění každý rámec. Chování prohození řetězců se mění pomocí Direct3D 12, aby ostatní funkce Direct3D 12 měly nízkou režii na procesor. Automatická barevná klávesa a vícevzorkování nejsou podporovány, i když jsou stále roztažení a otočení.
Životnost vyrovnávací paměti
Aplikace mohou ukládat předem vytvořené deskriptory, které odkazují na vyrovnávací paměti. To umožňuje zajistit, aby sada vyrovnávacích pamětí vlastněných řetězem prohození se po celou dobu životnosti řetězu prohození nikdy nemění. Sada vyrovnávacích pamětí vrácených IDXGISwapChain::GetBuffer se nezmění, dokud se nevolají určitá rozhraní API:
Pořadí vyrovnávacích pamětí vrácených GetBuffer se nikdy nezmění.
IDXGISwapChain3::GetCurrentBackBufferIndex vrátí index aktuální vyrovnávací paměti zpět do aplikace.
Prohození efektů
Jedinými podporovanými efekty prohození jsou DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL a DXGI_SWAP_EFFECT_FLIP_DISCARD, což vyžaduje, aby počet vyrovnávacích pamětí byl větší než jeden.
Přechod mezi režimy oken a režimy zobrazení na celé obrazovce
Direct3D 12 nepodporuje exkluzivní režim celé obrazovky (FSE). Místo toho, když je hra jedinou viditelnou aplikací na obrazovce, operační systém používá strategii označovanou jako optimalizace na celou obrazovku (FSO) k dosažení podobného efektu jako FSE bez nevýhod výkonu. Další informace o FSO naleznete v tématu Demystifikace optimalizace celé obrazovky.
Direct3D 12 udržuje omezení, že aplikace musí volat ResizeBuffers po přechodu mezi režimy oken a režimy zobrazení na celé obrazovce (řetězy překlopení modelu D3D11 mají stejná omezení).
idXGISwapChain::SetFullscreenState přechody nezmění sadu vyrovnávacích pamětí viditelných aplikací v řetězci prohození. Pouze ResizeBuffers a ResizeTarget volání vytvořit nebo zničit vyrovnávací paměti viditelné aplikací. V režimu Direct3D 12 IDXGISwapChain::SetFullscreenState nezadá exkluzivní režim celé obrazovky a jednoduše změní rozlišení a obnovovací frekvence, aby se povolila optimalizace na celé obrazovce. Tyto změny může aplikace provést bez použití této metody.
Je-li nebo IDXGISwapChain::P resent nebo IDXGISwapChain1::P resent, musí být vrácena zpět vyrovnávací paměť, která se má předložit ve stavu D3D12_RESOURCE_STATE_PRESENT. Pokud tomu tak není, dojde k chybě DXGI_ERROR_INVALID_CALL.
Řetězce prohození na celé obrazovce mají nadále omezení, které musí před konečným uvolněním řetězce prohození volat SetFullscreenState(FALSE, NULL). SetFullscreenState(FALSE) proběhne úspěšně u prohození řetězců běžících na zařízeních Direct3D 12.
Současné operace probíhají ve 3D frontě poskytované při vytváření swapchainu a aplikace mohou souběžně prezentovat více swapových řetězců a zaznamenávat a spouštět seznamy příkazů.
Když se v výpočetní frontě provede konečná část grafické práce (například postprocesingu rámce) nebo se nezapočítává do grafické fronty zařízení, může být vytvoření druhé 3D fronty, na které se má prezentovat, užitečné a zabránit latenci zpoždění prezentace při spuštění dalšího rámce.
Příklad
Následující ukázkový kód by byl k dispozici ve smyčce hlavního vykreslování:
void Present()
{
m_swapChain->Present(0, m_presentFlags);
m_backBufferIndex = (m_backBufferIndex + 1) % m_backBufferCount;
}
Vytváření swapových řetězců
Při použití CreateSwapChainForHwnd, CreateSwapChainForCoreWindownebo CreateSwapChainForComposition volání, mějte na paměti, že pDevice parametr ve skutečnosti vyžaduje ukazatel na přímou frontu příkazů v Direct3D 12 a ne zařízení.
Prezentace ve Windows 7
Při cílení na Direct3D 12 ve Windows 7 nejsou k dispozici nezbytné typy DXGI pro Direct3D 12, takže je nutné použít D3D12On7 poskytnuté ID3D12CommandQueueDownLevel (dotazováno z přímé fronty příkazů), aby bylo možné prezentovat.
Do aktuální metody Windows 7 zadáte otevřený seznam příkazů, který se pak použije, zavře a automaticky odešle do zařízení za vás. Musíte zadat vyrovnávací paměť zpět, která musí být vytvořena aplikací, musí být potvrzený prostředek, musí být jednoúčelový a musí být jedním z následujících formátů.
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
Související témata
- D3D12_HEAP_FLAGS
- pokročilé výukové videokursy DirectX: bez omezení framerate
- rendering