Ich habe DirectX11 UWP-Anwendung. Ich erstelle Swap-Chain mit IDXGIFactory2::CreateSwapChainForCoreWindow
und üblichen Parametern.Wie reduziert man die Präsentationslatenz der Swap-Kettendarstellung in der UWP-Anwendung?
::DXGI_SWAP_CHAIN_DESC1 desc{};
desc.Width = back_buffer_width;
desc.Height = back_buffer_height;
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferCount = 2;
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH | DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT;
desc.Scaling = DXGI_SCALING_NONE;
desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
::Microsoft::WRL::ComPtr<::IDXGISwapChain1> p_swap_chain;
Validate_OkResult
(
p_dxgi_factory->CreateSwapChainForCoreWindow
(
p_d3d_device.Get()
, reinterpret_cast< ::IUnknown * >(h_window) // passing ::Windows::UI::Core::CoreWindow^
, ::std::addressof(desc)
, nullptr
, &p_swap_chain
)
);
Validate_OkResult(p_swap_chain->SetMaximumFrameLatency(1)); // 1 is minimum allowed value
Wenn ich versuche, es in Vollbild-Modus von ::IDXGISwapChain::SetFullscreenState
es mit DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
nicht Aufruf zu ändern, und ich bin die folgende Diagnose bekommen:
DXGI ERROR: IDXGISwapChain::SetFullscreenState: Core Window SwapChains cannot transition to fullscreen, as they are considered perpetually windowed. [ MISCELLANEOUS ERROR #163: ]
DXGI ERROR: IDXGISwapChain::SetFullscreenState: For modern applications, fullscreen is not available. All swapchains must be windowed. [ MISCELLANEOUS ERROR #206: ]
ich, dass ich durch die Verwendung Vollbild-Modus heraus umschalten ApplicationView
:
::Windows::UI::ViewManagement::ApplicationView^h_view(::Windows::UI::ViewManagement::ApplicationView::GetForCurrentView());
if(h_view->IsFullScreenMode)
{
h_view->ExitFullScreenMode();
}
else
{
h_view->TryEnterFullScreenMode();
}
jedoch dieses Verfahren nur Taskleiste versteckt, verbirgt Fensterrahmen und maximiert das Fenster. Ich dachte, dass es mit Flip-Model-Präsentation in diesem Fall möglich sein sollte, Vorteile der üblichen Fullscreen-Swap-Ketten mit niedriger Latenzzeit zu erzielen, aber das scheint nicht zu funktionieren, und die Swap-Kette wird weiterhin zusammengesetzt. Composited Flip wird immer noch für die Präsentation verwendet und die Darstellungsverzögerung bleibt gleich ~ 30 ms wie im Fenstermodus. Muss ich die Komposition vollständig deaktivieren oder gibt es eine andere Methode, um eine zusätzliche Latenz zu vermeiden, die durch die Komposition angewendet wird?