상세 컨텐츠

본문 제목

[컴퓨터 그래픽스] Double buffering

STUDY/__Computer Graphics

by 2_54 2020. 9. 13. 22:07

본문

3학년 2학기 수강하고 있는 컴퓨터 그래픽스 과목에서 

double buffering에 대해 공부하고 한 페이지로 요약해서 적어오라는 과제가 있었다.

 

난 블로그에도 적어두고 나중에 봐야지~


더블 버퍼링(Double buffering)이란?

 

->  Flickering(깜빡임) 현상을 해결하기 위해 사용되는 기법

 

그러면!

 

★ Flickering 현상이 발생하는 이유?

 

->  싱글 버퍼링으로 그래픽을 그릴 경우, 데이터를 저장하는 동안에는 다음 그림의 데이터를 전송할 수 없다.

지우고 그리고 지우고 그리고를 반복하면서 필연적으로 깜빡임 현상이 발생하는 것!

그리고 GPU가 프레임 버퍼에 쓰는 작업은 프레임 버퍼를 읽는 속도에 비해 훨씬 느리다.

이러한 속도 차로 프레임 버퍼에 완전히 정보가 저장되지 않은 상태에서 불완전한 내용의 버퍼를 화면에 그리면서

Flickering 현상이 발생하게 된다. 

 

Double buffering으로 Flickering 현상을 해결하는 방법?

 

->  싱글 버퍼에서 buffer를 하나 추가하여 두 개의 버퍼를 사용한다. 

하나는 컴퓨터(GPU)가 연산한 값을 저장하는 Back buffer이고,

다른 하나는 모니터가 display하기 위한 읽기 전용 buffer인 Front buffer이다.

 

 

2개의 버퍼를 사용하여 Swap(Switching) 이라는 동작을 수행한다.

GPU 연산 결과가 Back buffer에 저장되면, Front buffer와 교체하여 모니터에 결과를 출력한다.

이렇게 buffer를 교환하는 동작을 Swap(Switching)이라고 한다.

 

/* 어떤 사람은 swap이라고하고, 어떤 사람은 switching 한다고 하던데

혹시나 두 개가 다른 행동일 경우 댓글로 알려주세요! */

 

Swap을 하면 Front buffer는 Back buffer가 되고, Back buffer는 Front buffer가 된다.

즉, 두 개의 buffer로 분리하여 Write 할 때는 Write만, Read 할 때는 Read만 한다.

이렇게 완전히 준비된 영상을 사용함으로써 Flickering 현상을 방지한다.

 

Double buffering의 문제점?

 

->  모니터가 Front buffer에서 데이터를 읽어서 출력하는 동안 Back buffer와 Swap이 될 수 있다.

데이터를 모니터에 출력하는 도중에 Swap이 발생하면 image tearing 문제가 발생한다.

 

image tearing : 모니터에 출력된 화면이 좌우로 갈라지듯이 종이처럼 찢어지는 듯한 현상.

 

이미지 출처 : https://commons.wikimedia.org/wiki/File:Tearing_(simulated).jpg

 

★ 해결 방법

 

-> 수직동기화( V-sync)를 사용한다. 

수직동기화를 통해 Swap 동작을 모니터의 Refresh 주기에 맞춰 수행할 수 있도록 하여

image tearing 현상을 해결한다.

 

수직 동기화(V-sync) : 컴퓨터 디스플레이에서 그래픽 카드의 프레임 생성과 모니터의 프레임 출력 타이밍을 맞추도록 설정하는 것.

 


컴퓨터 그래픽스 꽤나 재밌다 *^^*

ㅋㄷㅋㄷ

 

__END__

반응형

'STUDY > __Computer Graphics' 카테고리의 다른 글

[컴퓨터 그래픽스] Depth buffering (Z-buffering)  (0) 2020.09.18

관련글 더보기

댓글 영역