如何从 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 纹理的大小

如何阻止透明纹理上的OpenGL背景出血

如何从 Windows 任务管理器(应用程序选项卡)获取应用程序 + 从 Delphi 获取它们在 HDD 上的位置

如何使用 Java 从 Windows (MSCAPI) 上的智能卡获取用户身份?

如何从 Windows Mobile 上的 C# 文件中获取修改日期?