하나의 버퍼만을 이용해서 화면을 출력하면
버퍼안에 데이터를 담는 동안 출력을 못할 수 밖에 없다
위의 이유로 애니메이션이 껌뻑이는 현상을 볼 수가 있는데
이를 위한 것이 바로 교환 사슬과 페이지 전환이다.
레프트4 데드2 라는 게임 하면 Reloading~ 라는 말을 굉장히 많이 들을 수 있음
굳이 바쁜 와중에 왜 재장전이라고 외치는걸까!?
간단하다! "장전하는 도중에는 총 못쏘니까 나 좀 도와줘!"라는 의미다.
그렇게 도움을 받으며 장전을 하고~ 내 팀원이 장전을 할때는 내가 도와주고~
교환 사슬과 페이지 전환은 Reloading~ 이라고 생각하면 된다.
한 프레임의 전체를 화면 바깥(off-screen) 텍스처(back buffer)에 그린다
이후 하나의 완전한 프레임으로서 화면에 표시함
이렇게 하면 프레임이 그려지는 과정이 보이지 않음!
이러한 기법을 이중 버퍼링(double buffering)이라고 부름
삼중 버퍼링(triple buffering)도 있지만 일반적으로 버퍼 두 개면 충분!
이중 버퍼링을 효율적으로 구현하면 두 개의 텍스처 버퍼가 필요함
하나는 전면 버퍼(front buffer), 후면 버퍼(back buffer)임
전면버퍼가 화면에 표시되는 동안 다음 프레임을 후면 버퍼에서 그리고(and말고 그리다)
후변버퍼가 화면에 표시되는 동안 다음 프레임을 전면 버퍼에서 그림
이렇게 서로의 역할을 바꿔가며 페이지가 전환되게 하는 것을
Direct3D에서는 제시(presenting)라고 부름
제시는 아주 효율적인 연산임
버퍼의 내용 자체를 바꾸는 것이 아니라
전면 버퍼의 포인터와 후면 버퍼의 포인터만 맞바꾸는 것이기 때문

전면 버퍼와 후면 버퍼는 하나의 교환 사슬(swap chain)을 형성함
Direct3D에서 교환 사슬을 대표하는 인터페이스
IDXGUSwapCain
// 버퍼 크기 변경을 위한 메서드
IDXGISwapChain::ResizeBuffers
// 버퍼의 제시를 위한 메서드
IDXGISwapChain::Present
후면 버퍼는 텍스처이므로 그 원소를 텍셀(texel)이라고 불러야 하겠지만
후면 버퍼가 색상 정보를 담기 때문에 그냥 픽셀(pixel)이라고 부르는 경우도 많음
어떤 사람들은 색상이 아닌 정보를 담은 텍스처의 원소도 픽셀이라고 부르기도 함 ( ex. 법선 맵의 픽셀들)
'그래픽스 > DX 기록' 카테고리의 다른 글
Cylinder (0) | 2023.08.15 |
---|---|
Light (BlinnPhong) (0) | 2023.08.15 |
텍스쳐링 (0) | 2023.08.14 |
DXGI (DirectX Graphics Infrastructure) (0) | 2022.12.12 |
COM (Component Obejct Model) (0) | 2022.12.07 |