wglCreateContext 返回 NULL,其中包含 GetLastError 表示"no error"许多 OpenGL 上下文



我有几个"插件"-DLL,它们都有一个GUI,现在是基于OpenGL的。这一切都很好,但当我打开其中许多时,就会出现问题(如下)。。。它出现在我的主要开发机器上,带有相当旧但仍然合理的ATI Radeon HD 4600(带有最新的驱动程序,但仍然标记为传统),但不出现在既没有集成Intel HD也没有英伟达的现代笔记本电脑上。

2件事可能发生,似乎是随机的:

A) wglCreateContext返回NULL,但GetLastError表示一切正常!在这种情况下,我有一个使用CPU模拟的备份计划。速度慢,但有效。。。

不幸的是。。。

B) "aticfx64.dll"因读取0xffffffffff时发生访问冲突而崩溃。显然,这是ATI驱动程序,但无论哪种方式,都无法摆脱。。。

有什么想法吗?我的意思是,打开这么多窗户并不完全是典型的,但它应该能够处理它,对吧?我主要担心的是,是否有一些限制或方法来处理这个问题。我只是有点担心这可能会发生在两个窗户上。。。那就太糟糕了。

我建议检查内存使用情况。如果只在打开的多个窗口上发生这种情况,您可能会暴露一个驱动程序错误,它不会检查分配是否成功(当内存碎片或内存有限时,分配可能会失败)。当wglCreateContext返回NULL时,尝试分配更大的内存块——如果失败,可能就是这种情况。

另一个问题可能是使用比驱动程序允许的更多的共享上下文。理论规范(http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt)说"任意数量的上下文可以以这种方式共享数据。"但使用任意数量的共享上下文是规范中尘封的一角,可能没有经过很好的测试。如果您使用超过32个共享上下文(共享上下文可以作为位掩码存储在DWORD内部),则可能会出现这种情况。您可以通过尝试创建33个共享上下文并检查其中是否有返回NULL来非常容易地检查这一点。

当你不再使用HGLRC时,不要忘记调用wglDeleteContext,否则你会有内存泄漏,最后会有访问违规(至少在ati上)
(在我发现问题之前,我一直有这个奇怪的错误)

相关内容

  • 没有找到相关文章

最新更新