Condividi tramite


Metodo IDXGIFactory::CreateSwapChain (dxgi.h)

[A partire da Direct3D 11.1, è consigliabile non usare più CreateSwapChain per creare una catena di scambio. Usare invece CreateSwapChainForHwnd, CreateSwapChainForCoreWindow o CreateSwapChainForComposition a seconda della modalità di creazione della catena di scambio.

Crea una catena di scambio.

Sintassi

HRESULT CreateSwapChain(
  [in]  IUnknown             *pDevice,
  [in]  DXGI_SWAP_CHAIN_DESC *pDesc,
  [out] IDXGISwapChain       **ppSwapChain
);

Parametri

[in] pDevice

Tipo: IUnknown*

Per Direct3D 11 e le versioni precedenti di Direct3D, si tratta di un puntatore al dispositivo Direct3D per la catena di scambio. Per Direct3D 12 si tratta di un puntatore a una coda di comandi diretta (vedere ID3D12CommandQueue). Questo parametro non può essere NULL.

[in] pDesc

Tipo: DXGI_SWAP_CHAIN_DESC*

Puntatore a una struttura DXGI_SWAP_CHAIN_DESC per la descrizione della catena di scambio. Questo parametro non può essere NULL.

[out] ppSwapChain

Tipo: IDXGISwapChain**

Puntatore a una variabile che riceve un puntatore all'interfaccia IDXGISwapChain per la catena di scambio creata da CreateSwapChain .

Valore restituito

Tipo: HRESULT

DXGI_ERROR_INVALID_CALL se pDesc o ppSwapChain è NULL, DXGI_STATUS_OCCLUDED se si richiede la modalità schermo intero e non è disponibile o E_OUTOFMEMORY. Possono essere restituiti anche altri codici di errore definiti dal tipo di dispositivo passato.

Commenti

Nota Se si chiama questa API in un processo di sessione 0, restituisce DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Se si tenta di creare una catena di scambio in modalità schermo intero e la modalità schermo intero non è disponibile, la catena di scambio verrà creata in modalità finestra e DXGI_STATUS_OCCLUDED verrà restituita.

Se la larghezza del buffer o l'altezza del buffer è zero, le dimensioni verranno dedotte dalle dimensioni della finestra di output nella descrizione della catena di scambio.

Poiché l'output di destinazione non può essere scelto in modo esplicito quando viene creata la catena di scambio, è consigliabile non creare una catena di scambio a schermo intero. Ciò può ridurre le prestazioni della presentazione se le dimensioni della catena di scambio e le dimensioni della finestra di output non corrispondono. Ecco due modi per garantire che le dimensioni corrispondano:

  • Creare una catena di scambio finestra e quindi impostarla a schermo intero usando IDXGISwapChain::SetFullscreenState.
  • Salvare un puntatore alla catena di scambio immediatamente dopo la creazione e usarlo per ottenere le dimensioni della finestra di output durante un evento WM_SIZE. Ridimensionare quindi i buffer della catena di scambio (con IDXGISwapChain::ResizeBuffers) durante la transizione da finestra a schermo intero.
Se la catena di scambio è in modalità schermo intero, prima di rilasciarla è necessario usare SetFullscreenState per passare alla modalità finestra. Per altre informazioni sul rilascio di una catena di scambio, vedere la sezione "Eliminazione di una catena di scambio" della panoramica di DXGI.

Dopo il rendering del frame iniziale a schermo intero, il runtime potrebbe uscire a schermo intero in modo imprevisto durante una chiamata a IDXGISwapChain::P resent. Per risolvere questo problema, è consigliabile eseguire il codice seguente subito dopo aver chiamato CreateSwapChain per creare una catena di scambio a schermo intero (membro windowed di DXGI_SWAP_CHAIN_DESC impostato su 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);
}

È possibile specificare DXGI_SWAP_EFFECT e DXGI_SWAP_CHAIN_FLAG valori nella descrizione della catena di scambio a cui punta pDesc . Questi valori consentono di usare funzionalità come presentazione flip-model e protezione del contenuto usando le API pre-Windows 8.

Tuttavia, per usare la presentazione stereo e modificare il comportamento di ridimensionamento per il modello flip, le applicazioni devono usare il metodo IDXGIFactory2::CreateSwapChainForHwnd . In caso contrario, il contenuto del buffer nascosto viene ridimensionato in modo implicito in base alle dimensioni della destinazione della presentazione; vale a dire, non è possibile disattivare il ridimensionamento.

Note per le app di Windows Store

Se un'app di Windows Store chiama CreateSwapChain con schermo intero specificato, CreateSwapChain ha esito negativo.

Le app di Windows Store chiamano il metodo IDXGIFactory2::CreateSwapChainForCoreWindow per creare una catena di scambio.

Per informazioni su come scegliere un formato per il buffer nascosto della catena di scambio, vedi Conversione dei dati per lo spazio dei colori.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione dxgi.h
Libreria DXGI.lib

Vedi anche

Interfacce DXGI

Per ottenere prestazioni ottimali, usare il modello flip DXGI

IDXGIFactory