Partager via


Taux d’actualisation variable affiché

Les affichages de taux d’actualisation variable nécessitent à activer, il s’agit également de la prise en charge de la fonctionnalité « vsync-off ».

Taux d’actualisation variable affiché/Vsync désactivé

La prise en charge des affichages de taux d’actualisation variable 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 d’applications doivent se trouver sur des systèmes Windows 10 avec KB3156421 ou la mise à jour anniversaire installée. La fonctionnalité fonctionne sur toutes les versions de Direct3D 11 et 12 à l’aide de DXGI_SWAP_EFFECT_FLIP_* effets d’échange.

Pour ajouter la prise en charge vsync-off à vos applications, vous pouvez faire référence à un exemple d’exécution complet pour Direct3D 12, D3D12Fullscreen (reportez-vous à Exemples de travail). Il existe également quelques points non explicitement appelés dans l’exemple de code, mais vous devez prêter 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é à celui-ci que Present (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 l’application est en mode fenêtré, y compris le mode plein écran sans bordure. Pour plus d’informations, reportez-vous aux constantes DXGI_PRESENT.
  • La désactivation de vsync n’annule pas nécessairement votre fréquence d’images : les développeurs doivent également s’assurer que Présenter appels ne sont pas limités par d’autres événements de minutage (par exemple, l’événement CompositionTarget::Rendering dans une application XAML).

Le code ci-dessous récapise 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 les DXGI