2009-09-05 54 views
0

我試圖創建GL上下文,並且調用失敗,返回空指針。根據MSDN,當wglCreateContext失敗時,你會從GetLastError中得到原因。除了GetLastError給我一個數字,這不是所有的信息。如何從Windows上的OpenGL獲取有意義的錯誤信息

同樣根據MSDN,您可以使用FormatMessage從GetLastError代碼中獲取描述性字符串。但是,當我嘗試以下方法,我得到一個空字符串:

FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, errorStr, 0, NULL); 

我查MSDN文檔,顯然它只有適用於Windows系統錯誤的查找表。所以這對我無能爲力。有誰知道如何通過編程來找出爲什麼我的wglCreateContext調用失敗?

回答

0

我發現了這個問題。 FormatMessage工作得很好;我只是有錯誤的參數。這工作:

FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, errorStr, 255, NULL); 
0

我發現this MSDN pagethis OpenGL page,但他們只有錯誤代碼名稱的列表,而不是他們的數值。

This page在OpenGL的參考文獻提及的功能gluErrorString與此配置文件:

constGLubyte *gluErrorString(GLenum error) 

是在你使用這個庫可用?這應該在名爲「glu.h」的文件中定義。對於Visual Studio 6是在:

C:\ Program Files文件\微軟的Visual Studio \ VC98 \包含\ GL

如果你沒有這樣的版本,它應該是:

C:\ Program Files文件\微軟的SDK \的Windows \ v6.0A \包含\ GL

此文件夾還應該包含 「gl.h」,其中包含了錯誤C的定義頌歌。

編輯如果你得到一個空字符串,這可能意味着它是一個非標準的錯誤代碼。獲取來自GetLastError()的值並在「gl.h」中搜索它的十六進制表示。如果它發現它,那麼定義會告訴你錯誤是什麼。

+0

試過,但它也返回一個空字符串。 – 2009-09-05 16:57:45