다음을 통해 공유


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 또는 ppSwapChainNULL인 경우 전체 화면 모드를 요청하고 사용할 수 없는 경우 DXGI_STATUS_OCCLUDED 또는 E_OUTOFMEMORY. 전달된 디바이스 유형에 의해 정의된 다른 오류 코드도 반환될 수 있습니다.

설명

참고 세션 0 프로세스에서 이 API를 호출하면 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE 반환됩니다.
 
전체 화면 모드에서 스왑 체인을 만들려고 시도하고 전체 화면 모드를 사용할 수 없는 경우 스왑 체인이 창 모드로 만들어지고 DXGI_STATUS_OCCLUDED 반환됩니다.

버퍼 너비 또는 버퍼 높이가 0이면 스왑 체인 설명의 출력 창 크기에서 크기가 유추됩니다.

스왑 체인을 만들 때 대상 출력을 명시적으로 선택할 수 없으므로 전체 화면 스왑 체인을 만들지 않는 것이 좋습니다. 이렇게 하면 스왑 체인 크기 및 출력 창 크기가 일치하지 않는 경우 프레젠테이션 성능이 저하됩니다. 크기가 일치하는지 확인하는 두 가지 방법은 다음과 같습니다.

  • 창이 있는 스왑 체인을 만든 다음 IDXGISwapChain::SetFullscreenState를 사용하여 전체 화면으로 설정합니다.
  • 만든 직후 스왑 체인에 대한 포인터를 저장하고 이를 사용하여 WM_SIZE 이벤트 중에 출력 창 크기를 가져옵니다. 그런 다음 창에서 전체 화면으로 전환하는 동안 스왑 체인 버퍼의 크기를 조정합니다( IDXGISwapChain::ResizeBuffers 사용).
스왑 체인이 전체 화면 모드인 경우 해제하기 전에 SetFullscreenState 를 사용하여 창 모드로 전환해야 합니다. 스왑 체인 해제에 대한 자세한 내용은 DXGI 개요의 "스왑 체인 삭제" 섹션을 참조하세요.

런타임이 초기 프레임을 전체 화면으로 렌더링한 후 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

추가 정보

DXGI 인터페이스

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

IDXGIFactory