IDXGIFactory::CreateSwapChain method (dxgi.h)
[Dimulai dengan Direct3D 11.1, kami sarankan untuk tidak menggunakan CreateSwapChain lagi untuk membuat rantai pertukaran. Sebagai gantinya, gunakan CreateSwapChainForHwnd, CreateSwapChainForCoreWindow, atau CreateSwapChainForComposition tergantung pada bagaimana Anda ingin membuat rantai pertukaran.]
Membuat rantai pertukaran.
Sintaks
HRESULT CreateSwapChain(
[in] IUnknown *pDevice,
[in] DXGI_SWAP_CHAIN_DESC *pDesc,
[out] IDXGISwapChain **ppSwapChain
);
Parameter
[in] pDevice
Jenis: IUnknown*
Untuk Direct3D 11, dan versi Direct3D yang lebih lama, ini adalah penunjuk ke perangkat Direct3D untuk rantai pertukaran. Untuk Direct3D 12 ini adalah penunjuk ke antrean perintah langsung (lihat ID3D12CommandQueue) . Parameter ini tidak boleh NULL.
[in] pDesc
Jenis: DXGI_SWAP_CHAIN_DESC*
Penunjuk ke struktur DXGI_SWAP_CHAIN_DESC untuk deskripsi rantai pertukaran. Parameter ini tidak boleh NULL.
[out] ppSwapChain
Jenis: IDXGISwapChain**
Penunjuk ke variabel yang menerima penunjuk ke antarmuka IDXGISwapChain untuk rantai pertukaran yang dibuat CreateSwapChain .
Nilai kembali
Jenis: HRESULT
DXGI_ERROR_INVALID_CALL jika pDesc atau ppSwapChainNULL, DXGI_STATUS_OCCLUDED jika Anda meminta mode layar penuh dan tidak tersedia, atau E_OUTOFMEMORY. Kode kesalahan lain yang ditentukan oleh jenis perangkat yang diteruskan juga dapat dikembalikan.
Keterangan
Jika lebar buffer atau tinggi buffer adalah nol, ukuran akan disimpulkan dari ukuran jendela output dalam deskripsi rantai swap.
Karena output target tidak dapat dipilih secara eksplisit ketika rantai pertukaran dibuat, kami sarankan untuk tidak membuat rantai pertukaran layar penuh. Ini dapat mengurangi performa presentasi jika ukuran rantai pertukaran dan ukuran jendela output tidak cocok. Berikut adalah dua cara untuk memastikan bahwa ukurannya cocok:
- Buat rantai pertukaran berjendela lalu atur layar penuh menggunakan IDXGISwapChain::SetFullscreenState.
- Simpan pointer ke rantai pertukaran segera setelah pembuatan, dan gunakan untuk mendapatkan ukuran jendela output selama peristiwa WM_SIZE. Kemudian mengubah ukuran buffer rantai pertukaran (dengan IDXGISwapChain::ResizeBuffers) selama transisi dari jendela ke layar penuh.
Setelah runtime merender bingkai awal dalam layar penuh, runtime mungkin secara tiba-tiba keluar dari layar penuh selama panggilan ke IDXGISwapChain::P resent. Untuk mengatasi masalah ini, kami sarankan Anda menjalankan kode berikut tepat setelah Anda memanggil CreateSwapChain untuk membuat rantai pertukaran layar penuh (Anggota berjendelaDXGI_SWAP_CHAIN_DESC diatur ke FALSE).
// Detect if newly created full-screen swap chain isn't actually full screen.
IDXGIOutput* pTarget; BOOL bFullscreen;
if (SUCCEEDED(pSwapChain->GetFullscreenState(&bFullscreen, &pTarget)))
{
pTarget->Release();
}
else
bFullscreen = FALSE;
// If not full screen, enable full screen again.
if (!bFullscreen)
{
ShowWindow(hWnd, SW_MINIMIZE);
ShowWindow(hWnd, SW_RESTORE);
pSwapChain->SetFullscreenState(TRUE, NULL);
}
Anda dapat menentukan nilai DXGI_SWAP_EFFECT dan DXGI_SWAP_CHAIN_FLAG dalam deskripsi rantai pertukaran yang ditunjukkan pDesc . Nilai-nilai ini memungkinkan Anda menggunakan fitur seperti presentasi model balik dan perlindungan konten dengan menggunakan API pra-Windows 8.
Namun, untuk menggunakan presentasi stereo dan mengubah perilaku mengubah ukuran untuk model flip, aplikasi harus menggunakan metode IDXGIFactory2::CreateSwapChainForHwnd . Jika tidak, konten back-buffer secara implisit menskalakan agar sesuai dengan ukuran target presentasi; artinya, Anda tidak dapat menonaktifkan penskalakan.
Catatan untuk aplikasi Bursa Windows
Jika aplikasi Windows Store memanggil CreateSwapChain dengan layar penuh yang ditentukan, CreateSwapChain gagal.Aplikasi Windows Store memanggil metode IDXGIFactory2::CreateSwapChainForCoreWindow untuk membuat rantai pertukaran.
Untuk informasi tentang cara memilih format untuk buffer belakang rantai pertukaran, lihat Mengonversi data untuk ruang warna.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Windows |
Header | dxgi.h |
Pustaka | DXGI.lib |