c++ - 识别崩溃的图形驱动程序

标签 c++ opengl gpu gdi nvidia

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

一点也不神奇,但有时图形驱动程序无法完全恢复 - 它正常运行,除非我正在创建 OpenGL 上下文 - 上下文将成功创建,一切正常 - 但它是一个标准的 OpenGL 1.1 GDI context,所有在 OpenGL 1.1 之后设计且未被 GDI 涵盖的函数指针都只是空指针,因此应用程序在加载资源时会立即崩溃。

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

哦,还有,Intel 和 NVIDIA gpu 都无法创建更新的 OpenGL 上下文......确实是奇怪的行为......

最佳答案

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

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

关于c++ - 识别崩溃的图形驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21027664/

相关文章:

opengl - glsl sampler2DShadow 和 shadow2D 说明

c++ - OpenGL:如何只更新纹理的一部分?

c++ - 用GPU计算小于某个值的像素数

cuda - 为什么cuFFT这么慢?

c++ - 不从 "HelloWorld"场景开始时出现链接器错误

c++ - 预编译 header : do's and don'ts?

c++ - 字符串比较 vector C++

python - 使用OpenGL位图字体时是否可以获取字符的宽度?

c++ - 从相关类访问私有(private)成员数据

gpu - 在 blender 中渲染不会使用 GPU