Taux d’actualisation variable affiché

Les affichages de taux d’actualisation variables nécessitent l’activation de la déchirure , également appelée prise en charge « vsync-off ».

Taux d’actualisation variable/Vsync désactivé

La prise en charge des affichages de taux d’actualisation variables est obtenue en définissant certains indicateurs lors de la création et de la présentation de la chaîne d’échange.

Pour utiliser cette fonctionnalité, les utilisateurs de l’application doivent être sur Windows 10 systèmes sur utilisant KB3156421 ou la mise à jour anniversaire installée. La fonctionnalité fonctionne sur toutes les versions de Direct3D 11 et 12 à l’aide d’effets d’échange DXGI_SWAP_EFFECT_FLIP_* .

Pour ajouter la prise en charge de la synchronisation virtuelle à vos applications, vous pouvez vous référer à un exemple complet en cours d’exécution pour Direct3D 12, D3D12Fullscreen (reportez-vous à Exemples de travail). Il existe également quelques points qui ne sont pas explicitement mis en évidence dans l’exemple de code, mais vous devez y faire attention.

  • ResizeBuffers (ou ResizeBuffers1) doit avoir le même indicateur de création de chaîne d’échange (DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) passé à présent (ou Present1).
  • DXGI_PRESENT_ALLOW_TEARING ne peut être utilisé qu’avec l’intervalle de synchronisation 0. Il est recommandé de toujours passer cet indicateur de déchirure lors de l’utilisation de l’intervalle de synchronisation 0 si CheckFeatureSupport signale que la déchirure est prise en charge et que l’application est en mode fenêtré, y compris en mode plein écran sans bordure. Pour plus d’informations, reportez-vous aux constantes DXGI_PRESENT .
  • La désactivation de vsync ne supprime pas nécessairement votre fréquence d’images : les développeurs doivent également s’assurer que les appels de présentation ne sont pas limités par d’autres événements de minutage (tels que l’événement CompositionTarget::Rendering dans une application XAML).

Le code ci-dessous récapule quelques éléments clés que vous devez ajouter à vos applications.

//--------------------------------------------------------------------------------------------------------
// 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));

Améliorations apportées à DXGI 1.5

Guide de programmation pour DXGI