Método IDXGISwapChain::ResizeBuffers (dxgi.h)
Altera o tamanho, o formato e o número de buffers do buffer de fundo da cadeia de troca. Isso deve ser chamado quando a janela do aplicativo é redimensionada.
Sintaxe
HRESULT ResizeBuffers(
UINT BufferCount,
UINT Width,
UINT Height,
DXGI_FORMAT NewFormat,
UINT SwapChainFlags
);
Parâmetros
BufferCount
Tipo: UINT
O número de buffers na cadeia de troca (incluindo todos os buffers traseiros e frontais). Esse número pode ser diferente do número de buffers com os quais você criou a cadeia de troca. Esse número não pode ser maior que DXGI_MAX_SWAP_CHAIN_BUFFERS. Defina esse número como zero para preservar o número existente de buffers na cadeia de troca. Não é possível especificar menos de dois buffers para o modelo de apresentação de inversão.
Width
Tipo: UINT
A nova largura do buffer de fundo. Se você especificar zero, o DXGI usará a largura da área do cliente da janela de destino. Não é possível especificar a largura como zero se você chamou o método IDXGIFactory2::CreateSwapChainForComposition para criar a cadeia de troca para uma superfície de composição.
Height
Tipo: UINT
A nova altura do buffer de fundo. Se você especificar zero, o DXGI usará a altura da área do cliente da janela de destino. Não é possível especificar a altura como zero se você chamou o método IDXGIFactory2::CreateSwapChainForComposition para criar a cadeia de troca para uma superfície de composição.
NewFormat
Tipo: DXGI_FORMAT
Um valor de tipo DXGI_FORMAT para o novo formato do buffer de fundo. Defina esse valor como DXGI_FORMAT_UNKNOWN para preservar o formato existente do buffer de fundo. O modelo de apresentação flip dá suporte a um conjunto mais restrito de formatos do que o modelo de transferência de bloco de bits (bitblt).
SwapChainFlags
Tipo: UINT
Uma combinação de valores de tipo DXGI_SWAP_CHAIN_FLAG que são combinados usando uma operação OR bit a bit. O valor resultante especifica opções para o comportamento da cadeia de troca.
Valor retornado
Tipo: HRESULT
Retorna S_OK se tiver êxito; caso contrário, um código de erro. Para obter uma lista de códigos de erro, consulte DXGI_ERROR.
Comentários
Você não pode redimensionar uma cadeia de troca, a menos que libere todas as referências pendentes aos buffers de fundo. Você deve liberar todas as suas referências diretas e indiretas nos buffers de fundo para que o ResizeBuffers tenha êxito.
As referências diretas são mantidas pelo aplicativo depois que ele chama AddRef em um recurso.
As referências indiretas são mantidas por exibições para um recurso, associando uma exibição do recurso a um contexto de dispositivo, uma lista de comandos que usou o recurso, uma lista de comandos que usou uma exibição para esse recurso, uma lista de comandos que executou outra lista de comandos que usou o recurso e assim por diante.
Antes de chamar ResizeBuffers, certifique-se de que o aplicativo libere todas as referências (chamando o número apropriado de invocações de Versão ) nos recursos, quaisquer exibições para o recurso e quaisquer listas de comandos que usem os recursos ou exibições e verifique se nem o recurso nem uma exibição ainda estão associados a um contexto de dispositivo. Você pode usar ID3D11DeviceContext::ClearState para garantir que todas as referências sejam liberadas. Se uma exibição estiver associada a um contexto adiado, você também deverá descartar a lista de comandos parcialmente criada (chamando ID3D11DeviceContext::ClearState e, em seguida, ID3D11DeviceContext::FinishCommandList e Release na lista de comandos). Depois de chamar ResizeBuffers, você pode consultar novamente as interfaces por meio de IDXGISwapChain::GetBuffer.
Para cadeias de troca criadas com DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE, antes de chamar ResizeBuffers, chame também IDXGISurface1::ReleaseDC na superfície de back-buffer da cadeia de troca para garantir que você não tenha nenhum DCs (contextos de dispositivo GDI) pendentes abertos.
Recomendamos que você chame ResizeBuffers quando uma janela do cliente for redimensionada (ou seja, quando um aplicativo receber uma mensagem de WM_SIZE).
A única diferença entre IDXGISwapChain::ResizeBuffers no Windows 8 versus Windows 7 é com cadeias de troca de modelo de apresentação flip que você cria com o valor DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL ou DXGI_SWAP_EFFECT_FLIP_DISCARD definido. No Windows 8, você deve chamar ResizeBuffers para realizar uma transição entre o modo de tela inteira e o modo de janela; caso contrário, a próxima chamada para o método IDXGISwapChain::P resent falhará.
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | dxgi.h |
Biblioteca | DXGI.lib |