IDXGIFactory2::CreateSwapChainForCoreWindow 메서드(dxgi1_2.h)
스왑 체인의 출력 창에 대한 CoreWindow 개체와 연결된 스왑 체인을 만듭니다.
구문
HRESULT CreateSwapChainForCoreWindow(
[in] IUnknown *pDevice,
[in] IUnknown *pWindow,
[in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
[in, optional] IDXGIOutput *pRestrictToOutput,
[out] IDXGISwapChain1 **ppSwapChain
);
매개 변수
[in] pDevice
Direct3D 11 및 이전 버전의 Direct3D의 경우 스왑 체인용 Direct3D 디바이스에 대한 포인터입니다. Direct3D 12의 경우 직접 명령 큐에 대한 포인터입니다( ID3D12CommandQueue 참조). 이 매개 변수는 NULL일 수 없습니다.
[in] pWindow
CreateSwapChainForCoreWindow에서 만드는 스왑 체인과 연결된 CoreWindow 개체에 대한 포인터입니다.
[in] pDesc
스왑 체인 설명에 대한 DXGI_SWAP_CHAIN_DESC1 구조체에 대한 포인터입니다. 이 매개 변수는 NULL일 수 없습니다.
[in, optional] pRestrictToOutput
스왑 체인이 제한된 IDXGIOutput 인터페이스에 대한 포인터입니다. 스왑 체인이 다른 출력으로 이동되면 콘텐츠는 검은색입니다. 필요에 따라 이 매개 변수를 DXGI_PRESENT_RESTRICT_TO_OUTPUT 사용하여 이 출력의 콘텐츠를 제한하는 출력 대상으로 설정할 수 있습니다. 출력 대상의 콘텐츠를 제한하도록 이 매개 변수를 설정하지 않으면 NULL로 설정할 수 있습니다.
[out] ppSwapChain
CreateSwapChainForCoreWindow에서 만드는 스왑 체인에 대한 IDXGISwapChain1 인터페이스에 대한 포인터를 수신하는 변수에 대한 포인터입니다.
반환 값
CreateSwapChainForCoreWindow는 다음을 반환합니다.
- 스왑 체인을 성공적으로 만들었는지 S_OK.
- E_OUTOFMEMORY 메모리를 사용할 수 없는 경우 작업을 완료합니다.
- 호출 애플리케이션이 잘못된 데이터를 제공한 경우(예: pDesc 또는 ppSwapChain 이 NULL인 경우) DXGI_ERROR_INVALID_CALL.
- pDevice에 전달하는 디바이스 유형으로 정의된 DXGI_ERROR 항목에 설명된 다른 오류 코드일 수 있습니다.
Windows 7용 플랫폼 업데이트: Windows 7용 플랫폼 업데이트가 설치된 Windows 7 또는 Windows Server 2008 R2에서는 CreateSwapChainForCoreWindow 가 E_NOTIMPL 실패합니다. Windows 7용 플랫폼 업데이트에 대한 자세한 내용은 Windows 7용 플랫폼 업데이트를 참조하세요.
설명
이후에 IDXGISwapChain1::GetDesc1 메서드를 호출하여 할당된 너비 또는 높이 값을 검색할 수 있습니다.
한 번에 하나의 대칭 이동 프레젠테이션 모델 스왑 체인(레이어당)만 CoreWindow와 연결할 수 있으므로 개체 파기를 연기하는 Microsoft Direct3D 11 정책은 플립 프레젠테이션 모델 스왑 체인을 삭제하고 다른 스왑 체인으로 바꾸려고 하면 문제를 일으킬 수 있습니다. 이 상황에 대한 자세한 내용은 Flip 프레젠테이션 스왑 체인의 지연된 소멸 문제를 참조하세요.
스왑 체인의 백 버퍼에 대한 형식을 선택하는 방법에 대한 자세한 내용은 색 공간에 대한 데이터 변환을 참조하세요.
겹치는 스왑 체인
Windows 8.1 시작하여 포그라운드 계층에 추가 스왑 체인을 만들 수 있습니다. 포그라운드 스왑 체인은 백그라운드 스왑 체인(예: 게임 플레이)에서 실시간 렌더링을 확장하는 동안 네이티브 해상도로 UI 요소를 렌더링하는 데 사용할 수 있습니다. 이렇게 하면 더 빠른 채우기 속도를 위해 더 낮은 해상도 렌더링이 필요하지만 UI 품질을 희생하지 않는 시나리오를 사용할 수 있습니다.포그라운드 스왑 체인은 pDesc가 가리키는 DXGI_SWAP_CHAIN_DESC1 DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER 스왑 체인 플래그 를 설정하여 만들어집니다. 포그라운드 스왑 체인도 DXGI_ALPHA_MODE_PREMULTIPLIED 알파 모드를 사용해야 하며 DXGI_SCALING_NONE 사용해야 합니다. 미리 곱한 알파는 프레임이 표시되기 전에 각 픽셀의 색 값에 이미 알파 값을 곱해야 했음을 의미합니다. 예를 들어 50% 알파의 100% 흰색 BGRA 픽셀은 (0.5, 0.5, 0.5, 0.5)로 설정됩니다. 알파 미리 곱하기 단계는 D3D11_RENDER_TARGET_BLEND_DESC 구조의 SrcBlend 필드가 D3D11_SRC_ALPHA로 설정된 앱 혼합 상태(ID3D11BlendState 참조)를 적용하여 출력 병합 단계에서 수행할 수 있습니다. 알파 미리 곱하기 단계를 수행하지 않으면 포그라운드 스왑 체인의 색이 예상보다 밝아집니다.
전경 스왑 체인은 하드웨어에서 지원하는 경우 다중 평면 오버레이를 사용합니다. IDXGIOutput2::SupportsOverlays를 호출하여 오버레이 지원을 위해 어댑터를 쿼리합니다.
다음 예제에서는 CoreWindow에 대한 포그라운드 스왑 체인을 만듭니다.
DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 };
swapChainDesc.Width = static_cast<UINT>(m_d3dRenderTargetSize.Width);
swapChainDesc.Height = static_cast<UINT>(m_d3dRenderTargetSize.Height);
swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER;
swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
swapChainDesc.Scaling = DXGI_SCALING_NONE;
ComPtr<IDXGISwapChain1> swapChain;
HRESULT hr = dxgiFactory->CreateSwapChainForCoreWindow(
m_d3dDevice.Get(),
reinterpret_cast<IUnknown*>(m_window.Get()),
&swapChainDesc,
nullptr,
&swapChain
);
렌더링이 완료된 후 두 스왑 체인을 함께 표시합니다.
다음 예제에서는 두 스왑 체인을 모두 제공합니다.
HRESULT hr = m_swapChain->Present(1, 0);
if (SUCCEEDED(hr) && m_foregroundSwapChain)
{
m_foregroundSwapChain->Present(1, 0);
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 R2용 Windows Server 2012 및 플랫폼 업데이트 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | dxgi1_2.h |
라이브러리 | Dxgi.lib |