几天前,我更换了电脑硬件并安装了新的Windows 8系统。其中之一是将Radeon HD 7870显卡更换为Nvidia GTX 660。
重新设置Visual Studio 11后,我从Github下载了我的最新OpenGL项目并重建了整个项目。我从Visual Studio运行应用程序时出现了崩溃,原因是nvoglv32.dll
。
在Application.exe中(偏移量0x5D9F74E3)未经处理的异常:0xC0000005: 访问地址0x00000000时发生访问冲突。
在旧环境中,应用程序按预期工作。我没有更改项目或源代码的任何内容。唯一的区别是Visual Studio安装的语言,现在是英语,以前是德语。因此,我创建了一个新项目,并采用了所有设置,但错误仍然存在。
为了定位崩溃,我注意到所有初始化(窗口、着色器等)都成功了,错误出现在绘制调用glDrawElements()
处,它指向我的延迟渲染器的几何通道。
经过一些研究,我发现nvoglv32.dll
来自Nvidia,与名为Compatible OpenGL ICD
的服务有关。这是否意味着我的应用程序运行在兼容模式下?那听起来像是一种支持旧应用程序的模式,而我希望我的应用程序在常规模式下运行!顺便说一句,我安装了最新的显卡驱动程序。
老实说,我不知道如何解决这个崩溃问题。它可能的原因是什么,如何解决?
更新:我在Geforce论坛上找到了一个关于我的问题的帖子。虽然没有回复,但作者通过更改两个OpenGL调用的顺序来解决了问题。
Hi all,
After poking around with my application source code for a few hours, I found that calling the functions...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #) glBindVertexArray(#)
...in that order causes the crash in nvoglv64.dll. Reversing the order of these calls to...
glBindVertexArray(#) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #)
...prevents the crash and appears to be well-behaved.
Cheers, Robert Graf
由于我不使用顶点数组,所以我无法简单地进行此修复,但可能存在类似的问题。我将报告我的进度。
更新:我完全不知道如何解决我的问题。我尝试了不同的视频驱动程序版本,但没有任何区别。我完全重写了渲染器,使用最小的着色器和简单的前向渲染。但崩溃仍在第一个绘制调用时发生。