如何从 Windows 上的 OpenGL 获取有意义的错误信息
Posted
技术标签:
【中文标题】如何从 Windows 上的 OpenGL 获取有意义的错误信息【英文标题】:How can I get meaningful error info from OpenGL on Windows 【发布时间】:2009-09-05 15:53:14 【问题描述】:我正在尝试创建一个 GL 上下文,但调用失败,返回一个空指针。根据 MSDN,当 wglCreateContext 失败时,您可以从 GetLastError 获得原因。除了 GetLastError 给了我一个数字,这不是所有的信息。
再次根据 MSDN,您可以使用 FormatMessage 从 GetLastError 代码中获取描述性字符串。但是当我尝试以下操作时,我得到一个空白字符串:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, errorStr, 0, NULL);
我查看了 MSDN 文档,显然它只有一个用于 Windows 系统错误的查找表。所以这毕竟对我没有帮助。有谁知道如何以编程方式找出我的 wglCreateContext 调用失败的原因?
【问题讨论】:
【参考方案1】:我找到了this MSDN page 和this 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”,其中包含错误代码的定义。
EDIT 如果你得到一个空字符串,这可能意味着它是一个非标准错误代码。获取来自GetLastError()
的值并在“gl.h”中搜索它的十六进制表示。如果找到它,那么定义会告诉你错误是什么。
【讨论】:
试过了,但它也返回一个空字符串。【参考方案2】:我发现了问题。 FormatMessage 工作得很好;我只是有错误的参数。这有效:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, errorStr, 255, NULL);
【讨论】:
以上是关于如何从 Windows 上的 OpenGL 获取有意义的错误信息的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Opengl windows 上加速使用 Cairo 绘图?
Windows 上的 OpenCL/OpenGL 纹理互操作:调整 OpenGL 纹理的大小
如何从 Windows 任务管理器(应用程序选项卡)获取应用程序 + 从 Delphi 获取它们在 HDD 上的位置