IDXGIFactory::CreateSwapChain 方法 (dxgi.h)

[從 Direct3D 11.1 開始,建議您不要再使用 CreateSwapChain 來建立交換鏈結。 請改用 CreateSwapChainForHwndCreateSwapChainForCoreWindowCreateSwapChainForComposition ,視您想要建立交換鏈結的方式而定。]

建立交換鏈結。

語法

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

參數

[in] pDevice

類型: IUnknown*

針對 Direct3D 11 和舊版 Direct3D,這是交換鏈結 Direct3D 裝置的指標。 針對 Direct3D 12,這是直接命令佇列的指標, (參考 ID3D12CommandQueue) 。 此參數不可為 NULL

[in] pDesc

類型: DXGI_SWAP_CHAIN_DESC*

交換鏈結描述 之DXGI_SWAP_CHAIN_DESC 結構的指標。 此參數不可為 NULL

[out] ppSwapChain

類型: IDXGISwapChain**

變數的指標,接收 CreateSwapChain 所建立之交換鏈結之 IDXGISwapChain 介面的指標。

傳回值

類型: HRESULT

DXGI_ERROR_INVALID_CALL 如果 pDescppSwapChainNULL,DXGI_STATUS_OCCLUDED如果您要求全螢幕模式且無法使用,或E_OUTOFMEMORY。 也可能傳回由傳入之裝置類型所定義的其他錯誤碼。

備註

注意 如果您在會話 0 進程中呼叫此 API,它會 傳回DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
 
如果您嘗試以全螢幕模式建立交換鏈結,且全螢幕模式無法使用,交換鏈結將會以視窗模式建立,並傳回DXGI_STATUS_OCCLUDED。

如果緩衝區寬度或緩衝區高度為零,則會從交換鏈結描述中的輸出視窗大小推斷大小。

由於建立交換鏈結時無法明確選擇目標輸出,因此不建議建立全螢幕交換鏈結。 如果交換鏈結大小和輸出視窗大小不符,這可能會降低呈現效能。 以下是確保大小相符的兩種方式:

  • 建立視窗式交換鏈結,然後使用 IDXGISwapChain::SetFullscreenState 將其設定為全螢幕。
  • 在建立之後立即儲存交換鏈結的指標,並在WM_SIZE事件期間使用它來取得輸出視窗大小。 然後在從視窗轉換為全螢幕期間,使用 IDXGISwapChain::ResizeBuffers) 調整交換鏈結 (緩衝區的大小。
如果交換鏈結處於全螢幕模式,您必須先使用 SetFullscreenState 將其切換為視窗模式,才能釋放它。 如需釋放交換鏈結的詳細資訊,請參閱 DXGI 概觀的一節。

在運行時間以全螢幕呈現初始畫面之後,運行時間可能會在呼叫 IDXGISwapChain::P resent 期間意外結束全螢幕。 若要解決此問題,建議您在呼叫 CreateSwapChain 之後立即執行下列程式代碼,以建立全螢幕交換鏈結 (,DXGI_SWAP_CHAIN_DESC的 Windowed成員設定為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);
}

您可以在 pDesc 指向的交換鏈結描述中指定DXGI_SWAP_EFFECTDXGI_SWAP_CHAIN_FLAG值。 這些值可讓您使用預先 Windows 8 API 來使用翻轉模型呈現和內容保護等功能。

不過,若要使用立體聲簡報並變更翻轉模型的大小行為,應用程式必須使用 IDXGIFactory2::CreateSwapChainForHwnd 方法。 否則,後端緩衝區內容會隱含地調整以符合簡報目標大小;也就是說,您無法關閉調整。

Windows 市集應用程式的注意事項

如果 Windows 市集應用程式呼叫已指定全螢幕的 CreateSwapChain,CreateSwapChain 就會失敗。

Windows 市集應用程式會呼叫 IDXGIFactory2::CreateSwapChainForCoreWindow 方法來建立交換鏈結。

如需如何為交換鏈結的後台緩衝區選擇格式的詳細資訊,請參閱 轉換色彩空間的數據

規格需求

需求
目標平台 Windows
標頭 dxgi.h
程式庫 DXGI.lib

另請參閱

DXGI 介面

為了獲得最佳效能,請使用 DXGI 翻轉模型

IDXGIFactory