공부중
[DirectX] SwapChain, double buffering(더블 버퍼링) 본문
이전글에서도 썻었던 내용인데...
2018/04/11 - [Programing/DirectX] - [DirectX12]Hello Wolrd Sample - D3D12HelloWindow - 5
저 글에서 중간에 swap chain에 대해서 설명한 내용이 있는데 저 내용 그대로다...(글의 내용이 많이 겹칠것이다)
더블 버퍼링 미적용(시작시간 6초)
더블 버퍼링 적용(시작시간 8초)
결론부터 말하자면 위의 영상처럼 화면을 그리는데 깜박이는 현상을 없애기 위해서 더블버퍼링이라는것을 필요로 하게됬다.
화면의 하나의 프레임 전체를 화면에 바로 출력하는것이 아닌 버퍼를 두어서 버퍼에 그림을 그린다 (back buffer)
이 버퍼에 그린 그림을 다 그렸으면 화면에 출력하고 다음 버퍼에 다음에 출력할 프레임 전체를 그리고 다 그리면 화면으로 전송
위에서 말한것을 표현하자면 이런 그림이 된다...
이렇게 back buffer와 front buffer가 역활을 교환해서 전환되게 하는것을 presenting(제시)이라고 부른다.
이 buffer들의 내용을 전부 바꾸는 그런것이 아닌 포인터의 swap이다.
이렇게 front buffer와 back buffer는 하나의 swap chain을 형성하고
Direct3D에서 swap chain을 대표하는 인터페이스는 IDXGISwapChain이다.
IDXGISwapChain은 front buffer와 back buffer의 텍스처를 담고
buffer 크기 변경을 위한 메서드(IDXGISwapChain::ResizeBuffers)와
Present를 위한 메서드 ( IDXGISwapChain::Present )를 제공한다
2개의 버퍼를 사용하는 방법을 double buffering(이중 버퍼링)이라고 부르고
3개의 버퍼를 사용하는 방법을 triple buffering(삼중 버퍼링)이라고 부른다.
-> 꼭 2개로 할 필요는 없지만 2개로도 충분하다
( 요즘 유행하는 144hz나 240hz도 더블버퍼링으로 커버가 되는지가 궁금하긴하다... )
'Programing > DirectX' 카테고리의 다른 글
[DirectX9] 컴파일 에러 C2061 - DXGI_JPEG_* 에러 발생 (0) | 2021.08.24 |
---|---|
[DirectX12]Hello Wolrd Sample - D3D12HelloTexture - 7 (0) | 2018.06.07 |
[DirectX12]Hello Wolrd Sample - D3D12HelloTexture - 6 (0) | 2018.06.05 |
[DirectX12]Hello Wolrd Sample - D3D12HelloTexture - 5 (0) | 2018.06.05 |
[DirectX12]Hello Wolrd Sample - D3D12HelloTexture - 4 (0) | 2018.06.05 |