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(Double Buffering and Page Flipping) http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html
(Multiple Buffering) https://en.wikipedia.org/wiki/Multiple_buffering
'Poorman Cellar > Poorman GUI' 카테고리의 다른 글
[임베디드 리눅스] 프레임 버퍼 - Memory Mapping (메모리 맵핑) (0) | 2017.02.14 |
---|---|
[임베디드 리눅스] Frame Buffer (프레임 버퍼) 다루기 (0) | 2017.02.13 |