WinAPI 실습을 할 때 화면이 깜빡거리고 플레이어가 이동할 때마다 잔상이 남고 총알이 이동할 때 역시 잔상이 남았다. 이것을 해결하기 위해서는 더블 버퍼링을 사용해야 한다.

더블 버퍼링을 잘 표현한 그림이다. 사용자에게 보여주는 버퍼와 뒤에서 출력할 내용을 그리는 버퍼로 나누어진다.
(출처 : http://cafe.naver.com/buildgame.cafe)
void CCore::Render(float fDeltaTime)
{
//백버퍼 얻어오기
CTexture* pBackBuffer = GET_SINGLE(CResourcesManager)->GetBackBuffer();
//흰 사각형 그려 화면을 지움(초기화)
Rectangle(pBackBuffer->GetDC(), 0, 0, 1280, 720);
//백버퍼에 출력될 내용 그림
GET_SINGLE(CSceneManager)->Render(pBackBuffer->GetDC(), fDeltaTime);
//백퍼에 내용을 프런트 버퍼에 그림
BitBlt(m_hDC, 0, 0, m_tRS.iW, m_tRS.iH, pBackBuffer->GetDC(), 0, 0, SRCCOPY);
SAFE_RELEASE(pBackBuffer);
}
위 코드는 화면을 출력하는 함수이다. 먼저 백버퍼를 얻어와서 이전에 그렸던 것을 지우기 위해 화면 크기의 사각형을 그린다. 그리고 백버퍼에 화면에 출력될 내용들을 그린다. 그 후 백버퍼의 내용을 화면에 출력될 버퍼(m_hDC)에 출력한다. 이렇게 백버퍼를 사용하지 않고 사각형을 그려 화면을 지우려고 하면 화면이 깜빡이게 된다.
'WinAPI' 카테고리의 다른 글
| [Winapi] 게임 프레임워크 - 1. Core (0) | 2022.02.01 |
|---|---|
| [WinAPI] Pivot (0) | 2022.01.20 |
| [WinAPI] 삼각함수 (0) | 2022.01.16 |
| [WinAPI] 델타 타임 (0) | 2022.01.16 |
| [WinAPI] PeekMessage와 윈도우 창 크기 설정 (0) | 2022.01.15 |