Share via


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

[A partir de Direct3D 11.1, se recomienda no usar CreateSwapChain para crear una cadena de intercambio. En su lugar, use CreateSwapChainForHwnd, CreateSwapChainForCoreWindow o CreateSwapChainForComposition en función de cómo quiera crear la cadena de intercambio.

Crea una cadena de intercambio.

Sintaxis

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

Parámetros

[in] pDevice

Tipo: IUnknown*

Para Direct3D 11 y versiones anteriores de Direct3D, se trata de un puntero al dispositivo Direct3D para la cadena de intercambio. Para Direct3D 12, se trata de un puntero a una cola de comandos directa (consulte ID3D12CommandQueue). Este parámetro no puede ser NULL.

[in] pDesc

Tipo: DXGI_SWAP_CHAIN_DESC*

Puntero a una estructura de DXGI_SWAP_CHAIN_DESC para la descripción de la cadena de intercambio. Este parámetro no puede ser NULL.

[out] ppSwapChain

Tipo: IDXGISwapChain**

Puntero a una variable que recibe un puntero a la interfaz IDXGISwapChain de la cadena de intercambio que crea CreateSwapChain .

Valor devuelto

Tipo: HRESULT

DXGI_ERROR_INVALID_CALL si pDesc o ppSwapChain es NULL, DXGI_STATUS_OCCLUDED si solicita el modo de pantalla completa y no está disponible o E_OUTOFMEMORY. También se pueden devolver otros códigos de error definidos por el tipo de dispositivo pasado.

Comentarios

Nota Si llama a esta API en un proceso de sesión 0, devuelve DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Si intenta crear una cadena de intercambio en modo de pantalla completa y el modo de pantalla completa no está disponible, la cadena de intercambio se creará en modo de ventana y se devolverá DXGI_STATUS_OCCLUDED.

Si el ancho del búfer o el alto del búfer es cero, los tamaños se deducirán del tamaño de la ventana de salida en la descripción de la cadena de intercambio.

Dado que la salida de destino no se puede elegir explícitamente cuando se crea la cadena de intercambio, se recomienda no crear una cadena de intercambio de pantalla completa. Esto puede reducir el rendimiento de la presentación si el tamaño de la cadena de intercambio y el tamaño de la ventana de salida no coinciden. Estas son dos maneras de asegurarse de que los tamaños coinciden:

  • Cree una cadena de intercambio con ventanas y, a continuación, establézcala en pantalla completa mediante IDXGISwapChain::SetFullscreenState.
  • Guarde un puntero a la cadena de intercambio inmediatamente después de la creación y úselo para obtener el tamaño de la ventana de salida durante un evento de WM_SIZE. A continuación, cambie el tamaño de los búferes de la cadena de intercambio (con IDXGISwapChain::ResizeBuffers) durante la transición de la ventana a la pantalla completa.
Si la cadena de intercambio está en modo de pantalla completa, antes de liberarla, debe usar SetFullscreenState para cambiarla al modo con ventana. Para obtener más información sobre cómo liberar una cadena de intercambio, vea la sección "Destruir una cadena de intercambio" de información general de DXGI.

Después de que el tiempo de ejecución represente el fotograma inicial en pantalla completa, el tiempo de ejecución podría salir inesperadamente de la pantalla completa durante una llamada a IDXGISwapChain::P resent. Para solucionar este problema, se recomienda ejecutar el código siguiente justo después de llamar a CreateSwapChain para crear una cadena de intercambio de pantalla completa (miembro windowed de DXGI_SWAP_CHAIN_DESC establecida en 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);
}

Puede especificar DXGI_SWAP_EFFECT y DXGI_SWAP_CHAIN_FLAG valores en la descripción de la cadena de intercambio a la que apunta pDesc . Estos valores permiten usar características como la presentación del modelo invertido y la protección de contenido mediante las API anteriores a la Windows 8.

Sin embargo, para usar la presentación estéreo y cambiar el comportamiento de cambio de tamaño del modelo de volteo, las aplicaciones deben usar el método IDXGIFactory2::CreateSwapChainForHwnd . De lo contrario, el contenido del búfer de reserva se escala implícitamente para ajustarse al tamaño de destino de la presentación; es decir, no se puede desactivar el escalado.

Notas de las aplicaciones de la Tienda Windows

Si una aplicación de la Tienda Windows llama a CreateSwapChain con la pantalla completa especificada, se produce un error en CreateSwapChain .

Las aplicaciones de la Tienda Windows llaman al método IDXGIFactory2::CreateSwapChainForCoreWindow para crear una cadena de intercambio.

Para obtener información sobre cómo elegir un formato para el búfer de reserva de la cadena de intercambio, vea Convertir datos para el espacio de colores.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado dxgi.h
Library DXGI.lib

Consulte también

DXGI Interfaces

Para obtener el mejor rendimiento, use el modelo de volteo DXGI.

IDXGIFactory