IDXGIFactory::CreateSwapChain 方法 (dxgi.h)
[從 Direct3D 11.1 開始,建議您不要再使用 CreateSwapChain 來建立交換鏈結。 請改用 CreateSwapChainForHwnd、 CreateSwapChainForCoreWindow 或 CreateSwapChainForComposition ,視您想要建立交換鏈結的方式而定。]
建立交換鏈結。
語法
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 如果 pDesc 或 ppSwapChain 為 NULL,DXGI_STATUS_OCCLUDED如果您要求全螢幕模式且無法使用,或E_OUTOFMEMORY。 也可能傳回由傳入之裝置類型所定義的其他錯誤碼。
備註
如果緩衝區寬度或緩衝區高度為零,則會從交換鏈結描述中的輸出視窗大小推斷大小。
由於建立交換鏈結時無法明確選擇目標輸出,因此不建議建立全螢幕交換鏈結。 如果交換鏈結大小和輸出視窗大小不符,這可能會降低呈現效能。 以下是確保大小相符的兩種方式:
- 建立視窗式交換鏈結,然後使用 IDXGISwapChain::SetFullscreenState 將其設定為全螢幕。
- 在建立之後立即儲存交換鏈結的指標,並在WM_SIZE事件期間使用它來取得輸出視窗大小。 然後在從視窗轉換為全螢幕期間,使用 IDXGISwapChain::ResizeBuffers) 調整交換鏈結 (緩衝區的大小。
在運行時間以全螢幕呈現初始畫面之後,運行時間可能會在呼叫 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_EFFECT和DXGI_SWAP_CHAIN_FLAG值。 這些值可讓您使用預先 Windows 8 API 來使用翻轉模型呈現和內容保護等功能。
不過,若要使用立體聲簡報並變更翻轉模型的大小行為,應用程式必須使用 IDXGIFactory2::CreateSwapChainForHwnd 方法。 否則,後端緩衝區內容會隱含地調整以符合簡報目標大小;也就是說,您無法關閉調整。
Windows 市集應用程式的注意事項
如果 Windows 市集應用程式呼叫已指定全螢幕的 CreateSwapChain,CreateSwapChain 就會失敗。Windows 市集應用程式會呼叫 IDXGIFactory2::CreateSwapChainForCoreWindow 方法來建立交換鏈結。
如需如何為交換鏈結的後台緩衝區選擇格式的詳細資訊,請參閱 轉換色彩空間的數據。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | dxgi.h |
程式庫 | DXGI.lib |