Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

기본지식 - 교환사슬(Swap Chain)과 더블 버퍼링(Double Buffering) 본문

computer graphics/DirectX11

기본지식 - 교환사슬(Swap Chain)과 더블 버퍼링(Double Buffering)

scarecrow1992 2020. 11. 27. 23:27

모니터에 하나의 프레임 버퍼를 가지고 게임화면을 표현한다면, 매 프레임마다 버퍼를 지우고 그리거나 이미 그려진 버퍼에 덮어쓸것이다 전자의 경우에는 버퍼가 지워지는 찰나의 순간이 화면에 표시되면 화면 깜빡임(Screen Flickering)현상이 나타나며, 후자의 경우에는 화면이 그려지는 도중에 이전 화면가 현재화면이 겹처지면서 화면 찢어짐(Screen Tearing)현상이 생길것이다. 결국 이는 보는이에게 불편함을 끼치게 된다.

화면 찢어짐 효과

 

이러한 현상을 피하고자 사용하는 방법이 2개의 프레임 버퍼를 이용하는것이다. 각각의 프레임 버퍼는 각 화면 바깥의 텍스처인 후면 버퍼(Back Buffer)와 전면 버퍼(Front Buffer)을 뜻한다. 전면버퍼를 이용해 현재 화면을 표현하면서, 다음 화면이 될 장면을 후면 버퍼에 미리 저장해놓은후 다음프레임으로 넘어가야 할 경우에 버퍼만 교환한다면 사용자는 깔끔한 화면을 볼 수 있게 된다. 이러한 기법을 더블 버퍼링(Double Buffering)이라고 부른다.

 

Direct3D에서는 2개의 버퍼간의 역할을 교환하여 페이지가 전환되게 하는 것을 제시(presenting)이라고 부른다. 이는 버퍼 내의 실제 값을 바꾸는게 아니라 후면 버퍼의 포인터와 전면 버퍼의 포인터를 서로 맞바꾸는 플리핑(Flipping)을 하기 때문이다.

플리핑을 하기 위해서 Direct3D 에서는 전면 버퍼와 후면버퍼 사이의 스왑 체인(Swap Chain)을 형성하고있다. 스왑체인은 순차적으로 연결된 프레임 버퍼들의 집합이라고 표현할 수 있다.

Direct3D에서 스왑체인은 IDXGISwapChain이라는 인터페이스로 대표된다. 이 인터페이스는 전면 버퍼 텍스처와 후면 버퍼 텍스처를 담으며, 버퍼 크기 변경(IDXGISwapChain::ResizeBuffers()) 혹은 프레젠팅(IDXGISwapChain::Present()) 등을 위한 메서드들도 제공한다.

 

버퍼를 세개 사용하는 경우도 있으며 이는 삼중 버퍼링(triple buffering)이라고 부른다.

 

후면 버퍼는 텍스처이므로 그 원소를 텍셀(texel)이라고 불러야 하겠지만, 여기에서는 그냥 픽셀(pixel)이라고 부른다. 이는 후면 버퍼가 색상정보를 담기 때문이다. 경우에 따라서는 색상이 아닌 정보를 담은 텍스처의 원소도 픽셀이라고 부르는 사람이 있다.

Comments