首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在许多OpenGL上下文中,wglCreateContext返回NULL,GetLastError表示“没有错误”

在许多OpenGL上下文中,wglCreateContext返回NULL,GetLastError表示“没有错误”
EN

Stack Overflow用户
提问于 2013-11-26 22:55:41
回答 2查看 699关注 0票数 1

我有几个“插件”-DLL,它们都有一个图形用户界面,现在基于OpenGL。这一切都很好,但当我打开它们中的许多时,出现了一个问题(如下所示)……它发生在我的主要开发机器上,使用的是相当旧但仍然合理的ATI Radeon HD 4600 (带有最新的驱动程序,虽然仍然是传统的),但不是在既没有集成英特尔HD也没有NVidia的笔记本电脑上。

有两件事可能会发生,看起来是随机的:

A) wglCreateContext返回NULL,但是GetLastError说一切正常!在这种情况下,我有使用CPU进行仿真的备份计划。很慢,但很管用...

不幸的是。

B) "aticfx64.dll“崩溃,访问冲突读取0xffffffffffffffffff。很明显是ATI司机干的,但不管怎样都逃不掉...

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

EN

回答 2

Stack Overflow用户

发布于 2013-12-03 17:08:24

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-03-11 18:22:24

当你不再使用HGLRC时,不要忘记调用wglDeleteContext,否则你会有内存泄漏,最终会出现访问冲突(至少在ati上)。

(我有一个奇怪的错误,直到我发现了问题)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20220461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档