[DX12] IDXGISwapChain (dxgi.h)

Fuji ㅣ 2022. 12. 12. 04:34


특징

 

하나의 프레임에서 다음 프레임으로 화면이 갱신될 때, 그 사이에 미세한 공백으로 인해 화면이 깜빡이는 현상이 발생하는데, 이를 해소하기 위한 방법으로 SwapChain이 있다.

SwapChain은 버퍼 공간에 장면을 미리 준비한 후 화면에 전환시키면서 깜빡임 현상을 해결한다.

 

 

 

관련 개념 용어

 

SwapChain이 이루어지는 과정 (출처: DirectX12를 이용한 3D 게임 프로그래밍 입문)

 

  • Front Buffer (전면 버퍼)
    화면에 투영되야할 장면을 저장하는 버퍼 공간이다.
  • Back Buffer (후면 버퍼)
    화면에 그려야될 장면을 미리 준비하는 버퍼 공간이다.
  • Presenting (제시)
    Back Buffer를 Front Buffer로 전환시키는 과정을 의미한다.
    (실제 각자 가리키는 포인터를 전환시키면서 Presenting 과정이 이루어진다.) 
  • double buffering (이중 버퍼링)
    2개의 버퍼 공간 (back, front)를 사용해서 SwapChain을 하는 방법을 의미한다.
  • triple buffering (삼중 버퍼링)
    3개의 버퍼 공간(back buffer 2개)을 사용한 방식이다.
    GPU의 갱신 주기가 모니터의 갱신 주기를 앞설 경우 갱신중이던 back buffer의 장면이
    그대로 노출이 되는 현상이 생기는데 이를 해소하기 위한 방법중 하나이다.
    ( 외에 수직동기화, G-Sync, Free Sync 등도 이와 같은 문제를 해결하기위한 방법들이다. )
  • Texel
    pixel과 유사한 용어인데, 텍스처 상태의 픽셀 값을 텍셀이라고 부른다.

 

 

 

 

인터페이스

 

  • IDXGISwapChain
    DirectX에서 SwapChain을 사용하기 위한 인터페이스이다.
  • IDXGISwapChain::ResizeBuffers
    버퍼 크기를 변경할 수 있다.
HRESULT STDMETHODCALLTYPE CDXGISwapChainDWM::ResizeBuffers(
    UINT BufferCount, 
    UINT Width, UINT Height, 
    DXGI_FORMAT NewFormat, 
    UINT SwapChainFlags)
{
    return m_pSwapChain->ResizeBuffers(BufferCount, Width, Height, NewFormat, SwapChainFlags);
}

 

  • IDXGISwapChain::Present
    Presenting을 하는 메서드이다.

 

 

 

참고 사이트

https://learn.microsoft.com/en-us/windows/win32/api/dxgi/nn-dxgi-idxgiswapchain

 

IDXGISwapChain (dxgi.h) - Win32 apps

An IDXGISwapChain interface implements one or more surfaces for storing rendered data before presenting it to an output.

learn.microsoft.com