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_CALLpDesc 또는 ppSwapChain 이 NULL인 경우 전체 화면 모드를 요청하고 사용할 수 없는 경우 DXGI_STATUS_OCCLUDED 또는 E_OUTOFMEMORY. 전달된 디바이스 유형에 의해 정의된 다른 오류 코드도 반환될 수 있습니다.
설명
버퍼 너비 또는 버퍼 높이가 0이면 스왑 체인 설명의 출력 창 크기에서 크기가 유추됩니다.
스왑 체인을 만들 때 대상 출력을 명시적으로 선택할 수 없으므로 전체 화면 스왑 체인을 만들지 않는 것이 좋습니다. 이렇게 하면 스왑 체인 크기 및 출력 창 크기가 일치하지 않는 경우 프레젠테이션 성능이 저하됩니다. 크기가 일치하는지 확인하는 두 가지 방법은 다음과 같습니다.
- 창이 있는 스왑 체인을 만든 다음 IDXGISwapChain::SetFullscreenState를 사용하여 전체 화면으로 설정합니다.
- 만든 직후 스왑 체인에 대한 포인터를 저장하고 이를 사용하여 WM_SIZE 이벤트 중에 출력 창 크기를 가져옵니다. 그런 다음 창에서 전체 화면으로 전환하는 동안 스왑 체인 버퍼의 크기를 조정합니다( IDXGISwapChain::ResizeBuffers 사용).
런타임이 초기 프레임을 전체 화면으로 렌더링한 후 IDXGISwapChain::P resent를 호출하는 동안 런타임이 예기치 않게 전체 화면을 종료할 수 있습니다. 이 문제를 해결하려면 CreateSwapChain을 호출한 직후에 다음 코드를 실행하여 전체 화면 스왑 체인을 만드는 것이 좋습니다(DXGI_SWAP_CHAIN_DESC 창 멤버가 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 |