次の方法で共有


可変リフレッシュ レートの表示

可変リフレッシュ レートの表示では、破棄 を有効にする必要があります。これは"vsync-off" サポートとも呼ばれます。

可変リフレッシュ レートの表示/Vsync オフ

可変リフレッシュ レート表示のサポートは、スワップ チェーンを作成して表示するときに特定のフラグを設定することで実現されます。

この機能を使用するには、アプリ ユーザーが、KB3156421 または Anniversary Update がインストールされている Windows 10 システム上にある必要があります。 この機能は、DXGI_SWAP_EFFECT_FLIP_* スワップ効果を使用して、Direct3D 11 および 12 のすべてのバージョンで動作します。

アプリに vsync-off のサポートを追加するには、Direct3D 12 の完全な実行中のサンプル D3D12Fullscreen を参照してください (作業サンプルを参照してください)。 また、サンプル コードでは明示的に呼び出されていない点がいくつかありますが、注意する必要があります。

  • ResizeBuffers (または ResizeBuffers1) には、Present (または Present1) と同じスワップ チェーン作成フラグ (DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) が渡されている必要があります。
  • DXGI_PRESENT_ALLOW_TEARINGは、同期間隔 0 でのみ使用できます。 CheckFeatureSupport サポートされ、アプリがウィンドウ モード (境界線のない全画面表示モードを含む) であることを報告する場合は、同期間隔 0 を使用する場合は、常にこのティアリング フラグを渡すことが推奨されます。 詳細については、DXGI_PRESENT 定数を参照してください。
  • vsync を無効にしても、必ずしもフレーム レートがアンキャップされるとは限りません。開発者は、Present 呼び出しが他のタイミング イベント (XAML ベースのアプリの CompositionTarget::Rendering イベントなど) によって調整されないようにする必要もあります。

次のコードは、アプリに追加する必要があるいくつかの重要な部分を要約しています。

//--------------------------------------------------------------------------------------------------------
// Check Tearing Support
//--------------------------------------------------------------------------------------------------------

// Determines whether tearing support is available for fullscreen borderless windows.

void DXSample::CheckTearingSupport()
{
// Rather than create the 1.5 factory interface directly, we create the 1.4
// interface and query for the 1.5 interface. This will enable the graphics
// debugging tools which might not support the 1.5 factory interface.

    ComPtr<IDXGIFactory4> factory4;
    HRESULT hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory4));
    BOOL allowTearing = FALSE;
    if (SUCCEEDED(hr))
    { 
        ComPtr<IDXGIFactory5> factory5;
        hr = factory4.As(&factory5);
        if (SUCCEEDED(hr))
        {
            hr = factory5->CheckFeatureSupport(DXGI_FEATURE_PRESENT_ALLOW_TEARING, &allowTearing, sizeof(allowTearing));
        }
    }
    m_tearingSupport = SUCCEEDED(hr) && allowTearing;
}

//--------------------------------------------------------------------------------------------------------
// Set up swapchain properly
//--------------------------------------------------------------------------------------------------------

// It is recommended to always use the tearing flag when it is supported.
swapChainDesc.Flags = m_tearingSupport ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0;

//--------------------------------------------------------------------------------------------------------
// Present
//--------------------------------------------------------------------------------------------------------

UINT presentFlags = (m_tearingSupport && m_windowedMode) ? DXGI_PRESENT_ALLOW_TEARING : 0;

// Present the frame.
ThrowIfFailed(m_swapChain->Present(0, presentFlags));

DXGI 1.5 の機能強化

DXGI プログラミング ガイド