다음을 통해 공유


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 또는 ppSwapChainNULL인 경우) DXGI_ERROR_INVALID_CALL.
  • pDevice에 전달하는 디바이스 유형으로 정의된 DXGI_ERROR 항목에 설명된 다른 오류 코드일 수 있습니다.

Windows 7용 플랫폼 업데이트: Windows 7용 플랫폼 업데이트가 설치된 Windows 7 또는 Windows Server 2008 R2에서는 CreateSwapChainForCoreWindow 가 E_NOTIMPL 실패합니다. Windows 7용 플랫폼 업데이트에 대한 자세한 내용은 Windows 7용 플랫폼 업데이트를 참조하세요.

설명

참고IDXGIFactory2::CreateSwapChainForHwnd 대신 Windows 스토어 앱에서 이 메서드를 사용합니다.
 
스왑 체인의 너비, 높이 또는 둘 다(pDesc가 가리키는 DXGI_SWAP_CHAIN_DESC1WidthHeight 멤버)를 0으로 지정하면 런타임은 pWindow 매개 변수가 지정하는 출력 창에서 크기를 가져옵니다.

이후에 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

추가 정보

CoreWindow

최상의 성능을 위해 DXGI 대칭 이동 모델을 사용합니다.

IDXGIFactory2