라벨이 triple buffering인 게시물 표시

왜 Triple buffering을 사용하는가

이미지
지난번 글에서 double bufferingVSync에 관하여 설명하였다.
 이번 글에서는 VSync가 가지는 문제와 그것을 어떻게 triple buffering이 해결하는지를 적어보도록 하겠다.

 우선 다음 문제를 풀어보자.
vertical interval이 16.6ms마다 있는 display를 사용하고
double buffering을 사용하는 드라이버에서 VSync를 사용한다고 했을 때
back buffer에서 scene 하나를 완성하는 데 걸리는 시간이 16ms인 프로그램을 작성하면
이 프로그램은 몇 fps가 나올 것인가? 매 frame마다 하나의 scene을 16ms 동안 그리고, 남은 0.6ms는 VSync를 기다리기 때문에 16.6ms마다 한 frame을 그려서 60fps가 나온다.
 VSync를 기다리는 0.6ms가 아쉽기는 하지만 어차피 60fps 이상은 사람 눈으로 잘 구분이 안 되니 큰 손해를 보는 것은 아니다.

 문제는 아래의 상황이다. vertical interval이 16.6ms마다 있는 display를 사용하고
double buffering을 사용하는 드라이버에서 VSync를 사용한다고 했을 때
back buffer에서 scene 하나를 완성하는 데 걸리는 시간이
홀수 번째 scene은 15ms, 짝수 번째 scene은 17ms가 걸리도록 프로그램을 작성하면
이 프로그램은 몇 fps가 나올 것인가? 매 프레임 back buffer에 그리는 데 걸리는 평균 시간은 첫 번째 경우와 같다.
 그렇다면 이 케이스에서도 60 fps가 나올까?
 아니다. 홀수 번째 frame에서는 15ms 동안 그림을 그리고 1.6ms 동안 기다리지만, 짝수 번째 frame에서는 back buffer에 그림을 그리는데 17ms가 걸렸기 때문에 첫 번째 vertical interval 때 swap buffer를 하지 못하고, 그 다음 vertical interval까지 기다려야 한다. 즉, 그림이 완성된 뒤 16.2ms만큼 더 기다려야 화면을 바꿀 수 있다는 것…