Compartilhar via


Método IDXGIFactory::CreateSwapChain (dxgi.h)

[A partir do Direct3D 11.1, recomendamos não usar mais CreateSwapChain para criar uma cadeia de troca. Em vez disso, use CreateSwapChainForHwnd, CreateSwapChainForCoreWindow ou CreateSwapChainForComposition , dependendo de como você deseja criar a cadeia de troca.]

Cria uma cadeia de troca.

Sintaxe

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

Parâmetros

[in] pDevice

Tipo: IUnknown*

Para Direct3D 11 e versões anteriores do Direct3D, esse é um ponteiro para o dispositivo Direct3D para a cadeia de troca. Para o Direct3D 12, esse é um ponteiro para uma fila de comandos direta (consulte ID3D12CommandQueue). Esse parâmetro não pode ser NULL.

[in] pDesc

Tipo: DXGI_SWAP_CHAIN_DESC*

Um ponteiro para uma estrutura DXGI_SWAP_CHAIN_DESC para a descrição da cadeia de troca. Esse parâmetro não pode ser NULL.

[out] ppSwapChain

Tipo: IDXGISwapChain**

Um ponteiro para uma variável que recebe um ponteiro para a interface IDXGISwapChain para a cadeia de troca criada por CreateSwapChain .

Retornar valor

Tipo: HRESULT

DXGI_ERROR_INVALID_CALL se pDesc ou ppSwapChain for NULL, DXGI_STATUS_OCCLUDED se você solicitar o modo de tela inteira e ele não estiver disponível ou E_OUTOFMEMORY. Outros códigos de erro definidos pelo tipo de dispositivo passado também podem ser retornados.

Comentários

Nota Se você chamar essa API em um processo de Sessão 0, ela retornará DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Se você tentar criar uma cadeia de troca no modo de tela inteira e o modo de tela inteira não estiver disponível, a cadeia de troca será criada no modo de janela e DXGI_STATUS_OCCLUDED será retornado.

Se a largura do buffer ou a altura do buffer for zero, os tamanhos serão inferidos do tamanho da janela de saída na descrição da cadeia de troca.

Como a saída de destino não pode ser escolhida explicitamente quando a cadeia de troca é criada, recomendamos não criar uma cadeia de troca de tela inteira. Isso poderá reduzir o desempenho da apresentação se o tamanho da cadeia de troca e o tamanho da janela de saída não corresponderem. Aqui estão duas maneiras de garantir que os tamanhos correspondam:

  • Crie uma cadeia de troca em janelas e defina-a em tela inteira usando IDXGISwapChain::SetFullscreenState.
  • Salve um ponteiro para a cadeia de troca imediatamente após a criação e use-o para obter o tamanho da janela de saída durante um evento de WM_SIZE. Em seguida, redimensione os buffers de cadeia de troca (com IDXGISwapChain::ResizeBuffers) durante a transição de janelas para tela inteira.
Se a cadeia de troca estiver no modo de tela inteira, antes de liberá-la, você deverá usar SetFullscreenState para alterná-la para o modo de janela. Para obter mais informações sobre como liberar uma cadeia de troca, consulte a seção "Destruindo uma cadeia de troca" da Visão geral do DXGI.

Depois que o runtime renderizar o quadro inicial em tela inteira, o runtime poderá sair inesperadamente da tela inteira durante uma chamada para IDXGISwapChain::P resent. Para solucionar esse problema, recomendamos que você execute o código a seguir logo após chamar CreateSwapChain para criar uma cadeia de troca de tela inteira (membro em janela de DXGI_SWAP_CHAIN_DESC definido como 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);
}

Você pode especificar valores de DXGI_SWAP_EFFECT e DXGI_SWAP_CHAIN_FLAG na descrição da cadeia de troca para a qual o pDesc aponta. Esses valores permitem que você use recursos como apresentação de modelo flip e proteção de conteúdo usando APIs pré-Windows 8.

No entanto, para usar a apresentação estéreo e alterar o comportamento de redimensionamento para o modelo flip, os aplicativos devem usar o método IDXGIFactory2::CreateSwapChainForHwnd . Caso contrário, o conteúdo do buffer traseiro será dimensionado implicitamente para se ajustar ao tamanho de destino da apresentação; ou seja, você não pode desativar o dimensionamento.

Anotações para aplicativos da Windows Store

Se um aplicativo da Windows Store chamar CreateSwapChain com tela inteira especificada, CreateSwapChain falhará.

Os aplicativos da Windows Store chamam o método IDXGIFactory2::CreateSwapChainForCoreWindow para criar uma cadeia de troca.

Para obter informações sobre como escolher um formato para o buffer traseiro da cadeia de troca, consulte Convertendo dados para o espaço de cor.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho dxgi.h
Biblioteca DXGI.lib

Confira também

DXGI Interfaces

Para obter melhor desempenho, use o modelo de inversão DXGI

IDXGIFactory