2016-07-05 103 views
0

我迷上了wglSwapBuffers來製作文字疊加層。OpenGL只更新vSync fps的屏幕嗎?

我只是在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繪製文本becouse我不希望使用任何圖書館的使用它(如用於FreeType)

+1

聽起來好像您使用的是單個前臺緩衝區。你啓用了前後緩衝嗎? – rwols

+0

大聲笑....撕裂我的語法。即時通訊不是很擅長英語btw。 –

回答

1

如果一個Win32窗口的OpenGL初始化它,然後你無法執行GDI用它了畫畫。OpenGL是相互排斥與Windows繪圖功能。

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(); 
+0

由於他從外部連接到OpenGL應用程序,因此假定任何有關其上下文的內容都很危險。就像它是否是您的代碼所依賴的兼容性上下文一樣。 –