我挂了wglSwapBuffers来制作文字叠加。
我只是用GDI在HDC(wglSwapBuffers(HDC hdc))上绘制文字 如果fps超过我的屏幕刷新率,它就会闪烁。
是GDI问题还是OpenGL问题?
这是我的代码
HWND hwnd;
RECT rect;
hwnd = WindowFromDC(context);
GetClientRect(hwnd, &rect);
DrawText(context, str, strlen(str), &rect, DT_CENTER);
(ps。我不想使用OpenGL绘制文本因为我不想使用任何图书馆(如FreeType)
答案 0 :(得分:1)
如果Win32窗口上初始化了OpenGL,那么就不能再执行GDI绘图了。 OpenGL与Windows绘图功能互斥。
答案 1 :(得分:0)
在win32下,您可以在不使用任何外部库的情况下在OpenGL中呈现文本。 首先初始化你的字体(只需要完成一次):
const int NR_CHARS = 256;
int m_FontListBase = glGenLists(NR_CHARS);
wglUseFontBitmaps(wglGetCurrentDC(), 0, NR_CHARS-1, m_FontListBase);
然后当您想要将任何文本打印到OpenGL上下文时:
glRasterPos3f(x, y, z);
glPushAttrib(GL_LIST_BIT);
glListBase(m_FontListBase); //indicate start of glyph display lists
glCallLists(GLsizei(strlen(str)), GL_UNSIGNED_BYTE, str); //draw the characters in str
glPopAttrib();