728x90
이 방식을 사용하는 이유는 하나의 화면만으로 구성하게 된다면 깜박이는 현상이 계속 발생하기 때문이다.
이를 방지하지위해 보여줄 화면과 임시 화면을 구성해 임시화면에서 지우고 그리는 것을 반복하며 현재 화면은 그린 물체만 보여주는 방식이다.
1. 중요 함수
CreateCompatibleBitmap() // 비트맵과 호환되는 비트맵을 가져올수 있다
CreateCompatibleDC() // 현재 DC와 호환되는 DC를 가져올수 있다
BitBlt() // 현재 비트맵으로 비트맵을 복사해 준다
2. 구현 : 원래 dc를 이용하여 호환되는 비트맵과 dc를 만들어 준뒤 이를 이용해 bitmap을 복사한다
// 이중 버퍼링 용도의 비트맵과 DC를 만든다.
m_hBitmap = CreateCompatibleBitmap(m_hdc, m_ptResolution.x, m_ptResolution.y);
m_hMemDC = CreateCompatibleDC(m_hdc);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap);
DeleteObject(hOldBitmap);
void CCore::render()
{
// 흰색으로 한번 초기화 해준다.
Rectangle(m_hMemDC, -1, -1, m_ptResolution.x + 1, m_ptResolution.y + 1);
Vector2 ptPos = g_obj.GetPos();
Vector2 ptSize = g_obj.GetSize();
// 랜더링
Rectangle(m_hMemDC,
ptPos.x - ptSize.x / 2, ptPos.y - ptSize.y / 2,
ptPos.x + ptSize.x / 2, ptPos.y + ptSize.y / 2);
// m_hMemDC에 그려진 그림은 m_hdc에 복사한다
BitBlt(m_hdc, 0, 0, m_ptResolution.x, m_ptResolution.y,
m_hMemDC, 0, 0, SRCCOPY);
}
이 이중 버퍼링 방식을 사용하여 화면의 깜박거림을 사라지게 만들수 있었다.
728x90
'windowAPI' 카테고리의 다른 글
WindowApi 6강 - range기반 for문의 주의점 (0) | 2024.11.23 |
---|---|
WindowAPi 5강 - SceneManager (0) | 2024.11.19 |
WinAPI 4강 - KeyManager (0) | 2024.11.19 |
WindowAPI 2일차 - 비동기 입력 및 싱글톤 (0) | 2024.11.18 |
WindowAPI 1일차 - 사각형 그리기 (0) | 2024.11.17 |