Bagikan melalui


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

Catatan Jika Anda memanggil API ini dalam proses Sesi 0, api akan mengembalikan DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Jika Anda mencoba membuat rantai pertukaran dalam mode layar penuh, dan mode layar penuh tidak tersedia, rantai pertukaran akan dibuat dalam mode berjendela dan DXGI_STATUS_OCCLUDED akan dikembalikan.

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.
Jika rantai pertukaran dalam mode layar penuh, sebelum merilisnya, Anda harus menggunakan SetFullscreenState untuk mengalihkannya ke mode berjendela. Untuk informasi selengkapnya tentang merilis rantai pertukaran, lihat bagian "Menghancurkan Rantai Pertukaran" dari Gambaran Umum DXGI.

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

Lihat juga

Antarmuka DXGI

Untuk performa terbaik, gunakan model flip DXGI

IDXGIFactory