728x90
반응형
OpenGL을 사용하여 텍스트를 랜더링 할 때 Bitmap 방식을 사용하면 설정을 갱신해야 한다. wglMakeCurrent()로 갱신을 시도해보려 했지만 갱신이 되질 않았다. 한 번의 Refresh가 이뤄진 다음에야 제대로 그려졌다. 그러는 와중에 텍스트가 종류 별로 표시가 되는지 확인하려고 여러 개를 표시하니 첫 번째 텍스트만 표시되지 않았다.
작은 MOTION PTP 밑에 조금 더 큰 MOTION PTP라는 글자가 와야 하지만 생기지 않았다. 화면이 Redrawing 하면 생겨나게 된다. 그래서 wglUseFontBitmaps()를 두 번 호출하니 제대로 동작하였다. 성능에 얼마나 영향을 미칠지는 모르겠지만 갱신하는 법을 알 수 없으니 이 방법을 사용해야겠다. 전체를 새롭게 그리는 것보다 나을 듯하다.
typedef struct GLFONT_T
{
GLuint fontList;
HFONT hFont;
} GLFont;
GLFont GLCreateFont(const wchar_t* font_name, LONG font_height)
{
LOGFONT logfont;
logfont.lfHeight = font_height;
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = 0;
logfont.lfWeight = FW_BOLD;
logfont.lfItalic = FALSE;
logfont.lfUnderline = FALSE;
logfont.lfStrikeOut = FALSE;
logfont.lfCharSet = HANGUL_CHARSET;
logfont.lfOutPrecision = OUT_TT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = ANTIALIASED_QUALITY;
logfont.lfPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH;
wcscpy_s(logfont.lfFaceName, _countof(logfont.lfFaceName), font_name);
HDC hdc = wglGetCurrentDC();
HGLRC hrc = wglGetCurrentContext();
GLFont glfont;
glfont.fontList = glGenLists(256);
HFONT hFont = CreateFontIndirect(&logfont);
glfont.hFont = (HFONT)SelectObject(hdc, hFont);
wglUseFontBitmaps(hdc, 32, 96, glfont.fontList);
wglUseFontBitmaps(hdc, 32, 96, glfont.fontList); // 두번 호출하면 갱신됨
SelectObject(hdc, glfont.hFont);
DeleteObject(hFont);
return glfont;
}
void GLDeleteFont(const GLFont& glfont)
{
glDeleteLists(glfont.fontList, 256);
}
사용 코드
glRasterPos2f(position.x, position.y - 160);
GLFont glfont = GLCreateFont(L"tahoma", 100);
GLPrint(L"MOTION PTP");
GLDeleteFont(glfont);
728x90
반응형
'Program Language > OpenGL' 카테고리의 다른 글
[OpenGL] 텍스트의 검은 배경 없애기 (0) | 2022.08.31 |
---|---|
[OpenGL] GLAD 설치하기 (0) | 2022.08.29 |