我正在用C ++(MVS2008)开发一个应用程序,我遇到了这个问题所描述的问题:
NVIDIA OpenGL driver lost connection
我想问的不是解决方案,或者为什么会发生这种情况(比如在发布的帖子中),我想问一下我是否可以"赶上"此错误并在应用程序崩溃之前执行某些操作,例如包含应用程序状态的某些相关信息的输出日志。
在运行应用程序时不时出现错误而没有明确的原因,因此我想要这样的事情。
答案 0 :(得分:0)
现代Windows版本对应用程序的响应性提出了许多严格限制。如果进程在图形操作驱动程序中花费太多时间,则调用或需要太长时间才能从Windows获取事件监视程序触发器,并且Windows假定该进程陷入无限循环或违反了响应的要求,可能“做”某事。
尝试将单个glDraw…
电话分解为多个较小批次时会发生什么。一般情况下,您希望最大限度地减少glDraw…
次呼叫的数量,但如果单个glDraw…
呼叫完成时间超过10毫秒,则无论如何您都远远超出了OpenGL开销范围。
请注意,由于OpenGL的异步特性,看门狗可能会在OpenGL完成调用glFinish
或SwapBuffers
中咆哮。在这种情况下,帮助在绘制批次之间添加glFlush
命令可能会有所帮助。如果这没有帮助尝试glFinish
(这会对性能产生影响)。如果这也没有帮助。在单独的线程中创建辅助OpenGL上下文,该线程使用FBO渲染到纹理,并使主线程仅显示此中间纹理的内容。如果这没有帮助,请在PBuffer上创建辅助上下文,而不是在与主上下文相同的窗口上。