如何从Windows上的OpenGL获取有意义的错误信息

时间:2009-09-05 15:53:15

标签: winapi opengl

我正在尝试创建GL上下文,并且调用失败,返回空指针。根据MSDN,当wglCreateContext失败时,你会得到GetLastError的原因。除了GetLastError给我一个数字,这不是全部信息。

再次根据MSDN,您可以使用FormatMessage从GetLastError代码中获取描述性字符串。但是,当我尝试以下操作时,我得到一个空白字符串:

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

我检查了MSDN文档,显然它只有一个Windows系统错误的查找表。所以这对我来说没有任何帮助。有谁知道如何以编程方式弄清楚为什么我的wglCreateContext调用失败了?

2 个答案:

答案 0 :(得分:0)

我找到了this MSDN pagethis OpenGL page,但它们只有错误代码名称列表,而不是它们的数值。

OpenGL参考中的

This page提到了具有此配置文件的函数gluErrorString

constGLubyte *gluErrorString(GLenum error)

您使用的库中是否可以使用此功能?这应该在名为“glu.h”的文件中定义。对于Visual Studio 6,它位于:

  

C:\ Program Files \ Microsoft Visual Studio \ VC98 \ Include \ GL

如果您没有该版本,则应该在:

  

C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Include \ gl

此文件夹还应包含“gl.h”,其中包含错误代码的定义。

编辑如果你得到一个空字符串,那可能意味着它是一个非标准的错误代码。从GetLastError()获取值,并在“gl.h”中搜索它的十六进制表示。如果它找到了,那么define将告诉你错误是什么。

答案 1 :(得分:0)

我发现了问题。 FormatMessage工作得很好;我刚才有错误的参数。这很有效:

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