1. 소스 코드


2. 실행 결과


3. 설명

void CreateRoot(void) : 루트 버퍼에 프레임 버퍼와 같은 사이즈의 메모리 공간을 할당한다.

void DrawRoot(void) : 루트 버퍼에 원하는 그림을 그린다.

void UpdateRootToFB(void) : 루트 버퍼에 그려진 이미지를 프레임 버퍼에 복사한다.


프레임 버퍼의 이미지를 LCD 드라이버에서 보여줄때는 한 픽셀씩 순차적으로 그리기 때문에 그리는 도중에 프레임 버퍼가 업데이트 되는 경우에 이전 프레임 버퍼와 섞여 보이는 현상이 생긴다.

이 현상을 Screen tearing라고 하는데 이를 방지하고자 플립폴롭 버퍼링, 트리플 버퍼링을 사용한다.

프레임 버퍼와 같은 사이즈의 루트 버퍼를 2개 만들고 이미지를 그리는 버퍼와 업데이트하는 버퍼를 번갈아가며 진행하면 된다.

Screen tearing : https://en.wikipedia.org/wiki/Screen_tearing


출처 : http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html






[Reference]

(copy와 flip - Double buffering의 2가지 기법) http://blog.seulgi.kim/2014/05/flip-copy-double-buffering-2.html


+ Recent posts