识别崩溃的图形驱动程序

时间:2014-01-09 17:56:17

标签: c++ opengl gpu gdi nvidia

在我的笔记本上( dell xps 15,win8.1 x64,nvidia / intel gpu )我可以同时使用多达三个显示器,但如果我的笔记本电脑由于能量而禁用显示器保存并重新打开它们,如果你移动鼠标,有时图形驱动程序崩溃并将被恢复。

根本没有魔法,但有时图形驱动程序无法完全恢复 - 除非我正在创建OpenGL上下文,否则它会正常运行 - 上下文将成功创建,everthing行为正常 - 但它是标准的OpenGL 1.1 GDI上下文,以及在OpenGL 1.1之后设计并且未被GDI覆盖的所有函数指针都只是空指针,因此应用程序在加载资源时会立即崩溃。

我是否有机会检测到崩溃的驱动程序并告诉用户重新启动她/他的机器(这已经是我正在采用的这个问题的解决方案) - 或者我应该只是告诉他/她,某些事情可能是错误或不支持他们的OpenGL驱动程序版本?

哦,两者,英特尔和NVIDIA的GPU都无法创建更新的OpenGL环境..确实有奇怪的行为..

2 个答案:

答案 0 :(得分:3)

在WDDM(Windows Vista / 7/8)中“无缝地”处理驱动程序崩溃。通常,当显示驱动程序自行重置时,屏幕会变黑一段时间,然后在系统托盘中弹出一条消息,告诉您发生了这种情况。 NV和AMD驱动程序都这样做。也就是说,你所描述的行为也会在NV驱动程序中发生很多 - 这种情况下,只有完全重置似乎是NV独有的,才能创建ICD OpenGL上下文。最佳解决方案是在软件启动时检查GL版本/扩展支持,如果实施不充分,则打印错误。

通常,假设您的应用程序不是导致驱动程序重置的原因,在驱动程序重置后,OpenGL中的应用程序将继续运行。上下文重置在GL的幕后处理,驱动程序将为您重新加载所有资源。如果您使用robust context(新的WGL扩展名),可能能够检测到这种情况,但这听起来更像是在您的软件未运行时发生的问题。

答案 1 :(得分:1)

  

但它是一个标准的OpenGL 1.1 GDI上下文,并且在OpenGL 1.1之后发明并且未被GDI覆盖的所有函数指针都只是空指针,因此应用程序在加载资源时会立即崩溃。

您是否未测试所需扩展/ OpenGL版本的可用性?你不测试实际获得的函数指针是否有效?

对我来说,这听起来你盲目地认为,OpenGL扩展总是会加载得很好。但是,必须执行这些检查,如果它们无法向用户提供有意义的错误消息。