3

DirectX11 UWP アプリケーションがあります。IDXGIFactory2::CreateSwapChainForCoreWindow通常のパラメーターを使用してスワップ チェーンを作成します。

::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

呼び出してフルスクリーン モードに変更しようとする::IDXGISwapChain::SetFullscreenStateと失敗しDXGI_ERROR_NOT_CURRENTLY_AVAILABLE、次の診断が表示されます。

DXGI エラー: IDXGISwapChain::SetFullscreenState: コア ウィンドウ SwapChains は、永続的にウィンドウ化されていると見なされるため、フルスクリーンに移行できません。[ その他のエラー #163: ]

DXGI エラー: IDXGISwapChain::SetFullscreenState: 最新のアプリケーションでは、フルスクリーンは使用できません。すべてのスワップチェーンはウィンドウ化する必要があります。[ その他のエラー #206: ]

次を使用してフルスクリーンモードを切り替えることができることがわかりましたApplicationView

::Windows::UI::ViewManagement::ApplicationView ^ h_view(::Windows::UI::ViewManagement::ApplicationView::GetForCurrentView());
if(h_view->IsFullScreenMode)
{
    h_view->ExitFullScreenMode();
}
else
{
    h_view->TryEnterFullScreenMode();
}

ただし、このメソッドはタスクバーを非表示にし、ウィンドウ フレームを非表示にし、ウィンドウを最大化するだけです。この場合、フリップ モデル プレゼンテーションを使用すると、通常のフルスクリーン スワップ チェーンの低レイテンシの利点を得ることができるはずですが、それは 2 つの機能ではないようで、スワップ チェーンは引き続き合成されます。コンポジット フリップは引き続きプレゼンテーションに使用され、プレゼンテーション ラグはウィンドウ モードと同じ ~30ms のままです。コンポジションを完全に無効にする必要がありますか、それともコンポジションによって適用される余分なレイテンシーを回避する他の方法がありますか?

4

1 に答える 1