OpenGL是否仅更新vSync fps的屏幕?

时间:2016-07-05 14:05:06

标签: c++ opengl hook gdi+ gdi

我挂了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)

2 个答案:

答案 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();