본문 바로가기

개발 일지/메이플 스토리

winapi 더블버퍼링

void CMainGame::Render() { HBITMAP m_hBitMap, m_hOldBitMap; HDC m_hMemDC = CreateCompatibleDC(m_hdc); m_hBitMap = CreateCompatibleBitmap(m_hdc, SCREEN_WIDTH, SCREEN_HEIGHT); m_hOldBitMap = (HBITMAP)SelectObject(m_hMemDC, m_hBitMap); RECT rt = { 0,0,SCREEN_WIDTH, SCREEN_HEIGHT }; FillRect(m_hMemDC, &rt, (HBRUSH)COLOR_WINDOWFRAME); CSceneManager::GetInstance()->Render(m_hMemDC); BitBlt(m_hdc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, m_hMemDC, 0, 0, SRCCOPY); DeleteObject(SelectObject(m_hMemDC, m_hOldBitMap)); DeleteDC(m_hMemDC); }

그리는 함수를 호출할때마다, 화면에 직접 그리냐.


한꺼번에 메모리에 그려놓고,  다 그린놈을  그대로 화면으로 옮기냐  (복사) 차이.




매번 그릴 대상을 직접 화면에 하나씩 그려나가니 당연히 깜빡이는거고,

한꺼번에 메모리에 그려놓고, 메모리에 있는 내용 전부를  한번에 화면으로 옮기니  안깜빡이는거구나.


원리는 간단하네.