[OpenGL] Double Buffering
경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다.
게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다.
이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다
Why ?
Frame buffer는 화면과 1대1 대응관계이다.
컴퓨터가 이미지를 화면에 출력할 때 모두 지웠다 출력을 빠르게 반복한다.
이러한 원리 때문에 이미지가 빠르게 변화하는 상황에서 일부만 업데이트 되거나, 깜빡임 또는 찢어짐 현상이 발생한다.
그래서 하나의 화면을 두고 그림이 다 그려지면 우리에게 보여질 화면으로 넘기는(베끼는) 것이다.
How ?
2개의 버퍼를 용도를 다르게 해놓고 완성되면 즉시 버퍼를 바꾸는 개념이다.
2개의 프레임버퍼인 back buffer, front buffer를 사용한다.
front buffer는 화면 출력을 하고, back buffer는 뒤에서 draw 역할을 한다.

int main(int argc, char* argv[]) {
...
glfwInit();
// 위에 init과 아래의 createwindow 사이에서 설정해줘야한다.
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);
GLFWwindow* window = glfwCreateWindow(...);
...
}
Double Buffering 하드웨어 구현
ping-pong buffer라고도 불린다.

이 기법은 애니메이션이 부드럽게 나오는데 많은 도움이 된다.
당연히 하드웨어 비용이 증가하지만
예전에는 하드웨어 비용이 많이 들었는데 요즘은 비용이 많이 떨어져서 기본으로 사용한다.
Triple Buffering
버퍼를 3개 쓰는데 front buffer 1개, back buffer 2개를 사용한다.
하나의 back buffer는 그리는 데 사용하고, 하나의 back buffer는 화면을 지우는데(clear) 사용한다.
하나의 버퍼를 지우는데 사용하는 이유는 프레임 버퍼 전체를 배경색으로 지우는 작업이 예상 외로 시간이 많이 걸리기 때문이다.