更新 GPU 驱动程序后 OpenGL 支持中断

OpenGL support broken after updating GPU drivers

在 EVGA GTX 1080 FTW 上将 NVidia 驱动程序更新到 378.49 后,我开始使用 libGDX 获得此异常。

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: OpenGL is not supported by the video driver.
    at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.createDisplayPixelFormat(LwjglGraphics.java:229)
    at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setupDisplay(LwjglGraphics.java:174)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:138)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:120)
Caused by: org.lwjgl.LWJGLException: Pixel format not accelerated
    at org.lwjgl.opengl.WindowsPeerInfo.nChoosePixelFormat(Native Method)
    at org.lwjgl.opengl.WindowsPeerInfo.choosePixelFormat(WindowsPeerInfo.java:52)
    at org.lwjgl.opengl.WindowsDisplay.createWindow(WindowsDisplay.java:253)
    at org.lwjgl.opengl.Display.createWindow(Display.java:306)
    at org.lwjgl.opengl.Display.create(Display.java:848)
    at org.lwjgl.opengl.Display.create(Display.java:757)
    at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.createDisplayPixelFormat(LwjglGraphics.java:220)
    ... 3 more

OpenGL Extensions Viewer 显示 OpenGL 版本 4.5 在我的 GPU 上可用。

我已经尝试在我的 NVidia GPU 上强制 jrm 可执行文件 运行(它们实际上是 运行ning,但我只是想确保)

其他基于 OpenGL 的应用程序 运行 没问题。另外,我已经尝试 运行 从 Steam 编译 libGDX 游戏,它似乎 运行 就好了。

我尝试过使用具有不同 Java 版本的不同 JRM。我执行了干净的驱动程序重新安装并重新启动了几次。

AndroidStudio 和 IntelliJ 都出现了异常。

config.allowSoftwareMode = true; 不起作用(也不应该)。 Windows 当 libGTX 需要 2.0 时,仅支持 OpenGL 1.1 的软件渲染。

我有同样的问题。

Exception in thread "LWJGL Application" 
com.badlogic.gdx.utils.GdxRuntimeException: OpenGL is not supported by the video driver.
我刚刚从 Nvidia 376.33 下载并安装了以前的驱动程序,它解决了我的问题(windows 10 64 位)。

我们最近受到新 NVIDIA 驱动程序崩溃的影响,尤其是 3dVision 导致 java 和 LWJGL。

我尝试了所有方法,终于找到了彻底解决问题的方法,所以我想分享我的发现。

该漏洞分两个阶段出现。一种是由驱动程序本身引起的,另一种是由 3dVision 引起的。驱动程序本身停止使用 OpenGL 初始化函数,导致 "Pixelformat not accelerated",3dVision 甚至可能在非 LWJGL 函数(例如 GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().

上崩溃

听起来很奇怪,解决方案是严格使用 javaw.exe 而不是 java.exe for windows。我知道唯一的区别是 javaw 以 WINDOW 子系统为目标,而 java 以 CONSOLE 子系统 https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx?f=255&MSPPError=-2147217396 为目标,但由于某种原因,它解决了崩溃问题。

这里有问题。仅使用 "javaw" 不会解决问题。必须直接调用可执行文件。在安装了 java 的系统上调用 "javaw" 的问题是它会调用位于 system32 或 C:\ProgramData 中的虚拟 javaw.exe。这个虚拟文件会将命令委托给 java 的最新安装。如果发生这种情况,就会发生崩溃。

如果您有一个崩溃的测试程序,您可以尝试使用 "javaw -jar test.jar" 和 "C:\PathToJavaHome\bin\javaw.exe -jar test.jar" 来执行它。第一个会崩溃,第二个会工作。