콘솔창은 화면을 지웠다가 내용을 다시 쓰고하는 방식이기에 화면이 깜빡거리는 현상이 있다.
이 문제를 해결하기 위해 2중 버퍼링 구조를 만든다. 이번 포스팅은 그 작업에 기초가되는 ScreenBuffer 클래스를 만든다.
1. ScreenBuffer 클래스 생성
ScreenBuffer::ScreenBuffer(const Vector2& screenSize) : screenSize(screenSize)
{
// 콘솔 버퍼 생성.
screenBuffer = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
CONSOLE_TEXTMODE_BUFFER,
nullptr
);
// 제대로 생성됐는지 확인
assert(screenBuffer != INVALID_HANDLE_VALUE);
// 화면 창 크기 설정.
SMALL_RECT rect = {};
rect.Top = 0;
rect.Left = 0;
rect.Right = static_cast<short>(screenSize.x -1);
rect.Bottom = static_cast<short>(screenSize.y - 1);
BOOL result = SetConsoleWindowInfo(screenBuffer, TRUE, &rect);
// 창 크기 설정 확인.
assert(result == TRUE);
// 화면 버퍼 크기 설정 및 예외처리.
COORD coord = {};
coord.X = static_cast<short>(screenSize.x);
coord.Y = static_cast<short>(screenSize.y);
result = SetConsoleScreenBufferSize(screenBuffer, coord);
assert(result == TRUE);
// 커서 끄기(커서 깜빡임 방지).
CONSOLE_CURSOR_INFO info;
GetConsoleCursorInfo(screenBuffer, &info);
info.bVisible = FALSE;
SetConsoleCursorInfo(screenBuffer, &info);
}
1. Windows콘솔에 사용할 새로운 화면 버퍼를 생성
// 콘솔 버퍼 생성.
screenBuffer = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
CONSOLE_TEXTMODE_BUFFER,
nullptr
);
2. 콘솔 창 크기 설정
// 화면 창 크기 설정.
SMALL_RECT rect = {};
rect.Top = 0;
rect.Left = 0;
rect.Right = static_cast<short>(screenSize.x -1);
rect.Bottom = static_cast<short>(screenSize.y - 1);
BOOL result = SetConsoleWindowInfo(screenBuffer, TRUE, &rect);
3. 콘솔 버퍼 크기 설정
콘솔 창은 실제 보이는 영역이고 콘솔 버퍼는 화면 밖까지 포함한 전체 텍스트 저장 공간이다.
이 두개를 같은 크기로 설정한다.
// 화면 버퍼 크기 설정 및 예외처리.
COORD coord = {};
coord.X = static_cast<short>(screenSize.x);
coord.Y = static_cast<short>(screenSize.y);
result = SetConsoleScreenBufferSize(screenBuffer, coord);
'엔진프레임워크 만들기' 카테고리의 다른 글
| C++ 엔진프레임워크 - 6 기본 렌더링 2 (0) | 2026.09.09 |
|---|---|
| C++ 엔진프레임워크 - 5 기본 렌더링 (0) | 2026.09.08 |
| C++ 엔진프레임워크 - 4 DLL분리 (0) | 2026.09.01 |
| C++ 엔진프레임워크 - 3 입력 시스템 (0) | 2026.08.31 |
| C++ 엔진프레임워크 - 2 레벨, 엑터 구성 (0) | 2026.08.24 |

























