Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tampilan kecepatan refresh variabel memerlukan merobek untuk diaktifkan, ini juga dikenal sebagai dukungan "vsync-off".
Laju refresh variabel ditampilkan/Vsync nonaktif
Dukungan untuk tampilan kecepatan refresh variabel dicapai dengan mengatur bendera tertentu saat membuat dan menyajikan rantai pertukaran.
Untuk menggunakan fitur ini, pengguna aplikasi harus berada di sistem Windows 10 dengan KB3156421 atau Pembaruan Hari Jadi yang diinstal. Fitur ini berfungsi pada semua versi Direct3D 11 dan 12 menggunakan efek pertukaran DXGI_SWAP_EFFECT_FLIP_*.
Untuk menambahkan dukungan vsync-off ke aplikasi, Anda dapat merujuk ke sampel lengkap yang berjalan untuk Direct3D 12, D3D12Fullscreen (lihat Sampel Kerja). Ada juga beberapa poin yang tidak secara eksplisit dipanggil dalam kode sampel tetapi Anda perlu memperhatikannya.
- ResizeBuffers (atau ResizeBuffers1) harus memiliki bendera pembuatan rantai pertukaran (DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) yang sama yang diteruskan ke Present (atau Present1).
- DXGI_PRESENT_ALLOW_TEARING hanya dapat digunakan dengan interval sinkronisasi 0. Disarankan untuk selalu meneruskan bendera robek ini saat menggunakan interval sinkronisasi 0 jika CheckFeatureSupport melaporkan bahwa merobek didukung dan aplikasi dalam mode berjendela - termasuk mode layar penuh tanpa batas. Lihat konstanta DXGI_PRESENT untuk detail selengkapnya.
- Menonaktifkan vsync tidak selalu melepas kecepatan bingkai Anda: pengembang juga perlu memastikan Sajikan panggilan tidak dibatasi oleh peristiwa waktu lain (seperti peristiwa
CompositionTarget::Rendering
di aplikasi berbasis XAML).
Kode di bawah ini merekap beberapa bagian utama yang perlu Anda tambahkan ke aplikasi Anda.
//--------------------------------------------------------------------------------------------------------
// 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));
Topik terkait
-
Panduan Pemrograman untuk DXGI