METODE IDXGIFactory2::CreateSwapChainForCoreWindow (dxgi1_2.h)

Membuat rantai pertukaran yang terkait dengan objek CoreWindow untuk jendela output untuk rantai pertukaran.

Sintaks

HRESULT CreateSwapChainForCoreWindow(
  [in]           IUnknown                    *pDevice,
  [in]           IUnknown                    *pWindow,
  [in]           const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  [in, optional] IDXGIOutput                 *pRestrictToOutput,
  [out]          IDXGISwapChain1             **ppSwapChain
);

Parameter

[in] pDevice

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] pWindow

Penunjuk ke objek CoreWindow yang terkait dengan rantai pertukaran yang dibuat CreateSwapChainForCoreWindow .

[in] pDesc

Penunjuk ke struktur DXGI_SWAP_CHAIN_DESC1 untuk deskripsi rantai pertukaran. Parameter ini tidak boleh NULL.

[in, optional] pRestrictToOutput

Penunjuk ke antarmuka IDXGIOutput tempat rantai pertukaran dibatasi. Jika rantai pertukaran dipindahkan ke output yang berbeda, kontennya berwarna hitam. Anda dapat secara opsional mengatur parameter ini ke target output yang menggunakan DXGI_PRESENT_RESTRICT_TO_OUTPUT untuk membatasi konten pada output ini. Jika Anda tidak mengatur parameter ini untuk membatasi konten pada target output, Anda dapat mengaturnya ke NULL.

[out] ppSwapChain

Pointer ke variabel yang menerima pointer ke antarmuka IDXGISwapChain1 untuk rantai pertukaran yang dibuat CreateSwapChainForCoreWindow .

Mengembalikan nilai

CreateSwapChainForCoreWindow mengembalikan:

  • S_OK jika berhasil membuat rantai pertukaran.
  • E_OUTOFMEMORY jika memori tidak tersedia untuk menyelesaikan operasi.
  • DXGI_ERROR_INVALID_CALL jika aplikasi panggilan menyediakan data yang tidak valid, misalnya, jika pDesc atau ppSwapChain adalah NULL.
  • Mungkin kode kesalahan lain yang dijelaskan dalam topik DXGI_ERROR yang ditentukan oleh jenis perangkat yang Anda berikan ke pDevice.

Pembaruan Platform untuk Windows 7: Pada Windows 7 atau Windows Server 2008 R2 dengan Pembaruan Platform untuk Windows 7 diinstal, CreateSwapChainForCoreWindow gagal dengan E_NOTIMPL. Untuk informasi selengkapnya tentang Pembaruan Platform untuk Windows 7, lihat Pembaruan Platform untuk Windows 7.

Keterangan

Catatan Gunakan metode ini di aplikasi Windows Store daripada IDXGIFactory2::CreateSwapChainForHwnd.
 
Jika Anda menentukan lebar, tinggi, atau keduanya (anggota Lebar dan TinggiDXGI_SWAP_CHAIN_DESC1 yang ditunjukkan pDesc ) dari rantai pertukaran sebagai nol, runtime mendapatkan ukuran dari jendela output yang ditentukan parameter pWindow .

Anda selanjutnya dapat memanggil metode IDXGISwapChain1::GetDesc1 untuk mengambil nilai lebar atau tinggi yang ditetapkan.

Karena Anda hanya dapat mengaitkan satu rantai pertukaran model presentasi balik (per lapisan) sekaligus dengan CoreWindow, kebijakan Microsoft Direct3D 11 untuk menunda penghancuran objek dapat menyebabkan masalah jika Anda mencoba menghancurkan rantai pertukaran model presentasi balik dan menggantinya dengan rantai pertukaran lain. Untuk informasi selengkapnya tentang situasi ini, lihat Masalah Penghancuran yang Ditangguhkan dengan Flip Presentation Swap Chains.

Untuk informasi tentang cara memilih format untuk buffer belakang rantai pertukaran, lihat Mengonversi data untuk ruang warna.

Rantai pertukaran yang tumpang tindih

Dimulai dengan Windows 8.1, dimungkinkan untuk membuat rantai pertukaran tambahan di lapisan latar depan. Rantai pertukaran latar depan dapat digunakan untuk merender elemen UI pada resolusi asli sambil meningkatkan penyajian real time di rantai pertukaran latar belakang (seperti gameplay). Ini memungkinkan skenario di mana penyajian resolusi yang lebih rendah diperlukan untuk tingkat pengisian yang lebih cepat, tetapi tanpa mengorbankan kualitas UI.

Rantai pertukaran latar depan dibuat dengan mengatur bendera rantai pertukaran DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER di DXGI_SWAP_CHAIN_DESC1 yang ditunjuk pDesc . Rantai pertukaran latar depan juga harus menggunakan mode alfa DXGI_ALPHA_MODE_PREMULTIPLIED , dan harus menggunakan DXGI_SCALING_NONE. Alfa yang telah dikutip sebelumnya berarti bahwa setiap nilai warna piksel diharapkan sudah dikalikan dengan nilai alfa sebelum bingkai disajikan. Misalnya, piksel BGRA putih 100% pada 50% alfa diatur ke (0,5, 0,5, 0,5, 0,5). Langkah pramutasi alfa dapat dilakukan dalam tahap output-merger dengan menerapkan status campuran aplikasi (lihat ID3D11BlendState) dengan bidang SrcBlend struktur D3D11_RENDER_TARGET_BLEND_DESC diatur ke D3D11_SRC_ALPHA. Jika langkah premultiplikasi alfa tidak dilakukan, warna pada rantai pertukaran latar depan akan lebih cerah dari yang diharapkan.

Rantai pertukaran latar depan akan menggunakan overlay multiplane jika didukung oleh perangkat keras. Panggil IDXGIOutput2::SupportsOverlays untuk mengkueri adapter untuk dukungan overlay.

Contoh berikut membuat rantai pertukaran latar depan untuk CoreWindow:


DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 };

swapChainDesc.Width = static_cast<UINT>(m_d3dRenderTargetSize.Width);
swapChainDesc.Height = static_cast<UINT>(m_d3dRenderTargetSize.Height);
swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER;
swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
swapChainDesc.Scaling = DXGI_SCALING_NONE;

ComPtr<IDXGISwapChain1> swapChain;
HRESULT hr = dxgiFactory->CreateSwapChainForCoreWindow(
    m_d3dDevice.Get(),
    reinterpret_cast<IUnknown*>(m_window.Get()),
    &swapChainDesc,
    nullptr,
    &swapChain
    );

Sajikan kedua rantai pertukaran bersama-sama setelah penyajian selesai.

Contoh berikut menyajikan kedua rantai pertukaran:


HRESULT hr = m_swapChain->Present(1, 0);

if (SUCCEEDED(hr) && m_foregroundSwapChain)
{
    m_foregroundSwapChain->Present(1, 0);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 dan Pembaruan Platform untuk Windows 7 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2012 dan Pembaruan Platform untuk Windows Server 2008 R2 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header dxgi1_2.h
Pustaka Dxgi.lib

Lihat juga

CoreWindow

Untuk performa terbaik, gunakan model flip DXGI

IDXGIFactory2