-
win32 게임 만들기(5)-Double BufferingWindows Programming/win32 게임엔진만들기 2022. 4. 17. 13:58
현재 상황 : 화면엔 잔상이 계속 남아있음
해결방안 생각 : 물체를 그리기 전에 화면을 한번 클리어 한후 그리기 작업을 실행
(해상도 크기와 동일한 하얀색 사각형을 그려 화면 청소를 함)
문제점
우리의 해상도 가 1280x768=983,040
매 프레임 마다 약 백만개의 픽셀을 255,255,255 색칠을 한다는건 너무 많은 작업 너무 느려짐
해결법
이중버퍼링(Double Buffering) 버퍼를 2개를 두고 렌더링을 양쪽으로 관리
물체의 변경(update)가 일어날때마다 그리는 작업을 내가 보는 화면이 아닌 다른 공간(비트맵)에 그려 놓고,
모든 그리기 작업이 완료된 시점에 내가 볼 화면으로 완성된 그림을 보여줌
우측 비트맵 공간에서 작업이 완료되면 완료된 작업물을 실질적 내가 보는 화면 좌측에 그림
윈도우는 내부적으로 작업영역에 대해서 픽셀을 보유 하게 되는데, 이 픽셀 데이터들을 다 묶어서 비트맵 이라고 한다.
우리는 윈도우 창을 하나더 띄울 필요 없이 비트맵 데이터만 가지고 있으면 된다.
CCore::init 이중버퍼링 용도의 비트맵과 DC 추가 CreateCompatibleBitmap() : 비트맵을 생성 똑같은 해상도로 만듬
CreateCompatibleDC() : 비트맵 데이터를 복사
SelectObject =>함수로 DC한테 그릴 공간(비트맵)을 지정해줌
소멸처리 render()
=> 1. 함수에서 클리어할 화면과 그릴 화면을 새로만든 비트맵으로 변경 후
2. BitBlt() : 비트맵에 그려진 데이터를 보여줄 비트맵 쪽으로 복사
실행
좌측 이중버퍼링 전
우측 이중버퍼링 후
출처참고:
'Windows Programming > win32 게임엔진만들기' 카테고리의 다른 글
win32 게임 만들기(7-1) -Scene Manager (0) 2022.04.23 win32 게임 만들기(6) - Key Manager (0) 2022.04.17 win32 게임 만들기(4)-TIMER (시간 동기화) (0) 2022.04.01 win32 게임 만들기(3) 움직이는 object 그리기(비동기 키 입출력) (0) 2022.04.01 win32 게임 만들기(2-2)- CCore::progress() (유휴시간) (0) 2022.03.30