碰撞在绘图调用在新的显卡nvoglv32.dll(Crash at draw call in nvo

2019-08-17 03:04发布

几天前我建立我的计算机和安装,因为一些硬件更改Windows 8中的新副本。 等等我改变从的Radeon HD 7870显卡Nvidia的GTX 660。

重新设置的Visual Studio 11后,我从网上下载Github上我最后的OpenGL项目和重建整个项目。 我跑的应用出来的Visual Studio,它坠毁因为nvoglv32.dll

0000005:在0x5D9F74E3(nvoglv32.dll)在Application.exe未处理的异常访问冲突读取位置00000000。

在旧环境中的应用发挥预期。 我并没有改变项目或源代码的任何东西。 唯一的区别是在Visual Studio制作安装的语言 - 英语,现在的语言和之前是德国人。 因此,我创建了一个新的项目,并通过了所有的设置,但仍然是错误。

为了找到相关的崩溃,我注意到,所有的初始化(窗口,着色器,...)成功,错误是在绘图调用glDrawElements()这referrs我递延渲染的gemoetry通。

一些研制后,我发现, nvoglv32.dll是来自Nvidia,是关于一个叫服务Compatible OpenGL ICD 。 这是否在某种程度上意味着我的应用程序将在兼容模式下运行? 这听起来像一个模式,支持旧的应用程序,我想我的在常规模式下运行! 顺便说一句我安装我的显卡的最新的稳定的驱动程序。

说实话,我不知道如何处理解决这个崩溃。 这是什么原因,以及如何解决它?

更新:我发现了一个在GeForce论坛后我的问题。 虽然没有回复,则作者日期可以通过改变两个OpenGL调用顺序解决问题。

大家好,

闲逛用了几个小时我的应用程序的源代码后,我发现,调用函数...

 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #) glBindVertexArray(#) 

...的顺序导致nvoglv64.dll崩溃。 要扭转这些调用的顺序...

 glBindVertexArray(#) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, #) 

......防止崩溃,似乎是乖巧。

干杯,罗伯特·格拉夫

因为我不使用顶点数组,我不能简单的这样做修复,但有可能是一个类似的问题。 我将报告我的进步。

更新:我绝对不知道如何解决我的问题。 我尝试不同的视频驱动程序版本,但它没有什么区别。 我使用最少的着色器和简单的向前渲染完全重写渲染器。 但窗台崩溃发生在第一次抽签通话。

Answer 1:

为了找到相关的崩溃,我注意到,所有的初始化(窗口,着色器,...)成功,错误是在绘图调用glDrawElements()。

最有可能你有一个出界外接入代码中的所有的时间,但AMD的Radeon催化剂驱动没有储备更多的地址空间,或抓住了他们事先。 现在你的NVIDIA GeForce驱动程序的不知道。

无论你传递glDrawElements了过大数量的count的元素,吸引,或者你的索引缓冲区包含超出你的顶点数组的范围值是指数。 如果是后者,那么你很可能使用客户端顶点数组,如维也纳组织常钓越界,访问; 还有那些不会崩溃,你的客户端程序,但只呈现垃圾。



Answer 2:

最后,我想出了一个解决方案,以修复崩溃。

该SFML框架我用它来创建窗口,更提供了一个功能重设背景下的OpenGL的状态。 我窗口创建后的说法。

虽然我无法解释为什么,去除函数调用解决了崩溃。 也许是因为GLEW或者别的尚未初始化的那一刻。

sf::RenderWindow window;
window.create(VideoMode(1024, 768), "Window Title");
window.resetGLStates(); // removing this line fixed the crash
window.setVerticalSyncEnabled(true);


文章来源: Crash at draw call in nvoglv32.dll on new video card