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
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.
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 |