我正在将一个带有 OSG Earth 的应用程序从 Windows 移植到 Linux。操作系统和软件基本相同(Qt 5.9、Linux 内核 3.18.24、Mesa 18.2.3)。但是,覆盖后export MESA_GL_VERSION_OVERRIDE="4.5"
OpenGL 在不同硬件上的行为非常不同:
在 Intel i7-4770T 上:
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.2.3
OpenGL core profile shading language version string: 3.30
OpenGL version string: 4.5 (Compatibility Profile) Mesa 18.2.3
OpenGL shading language version string: 3.30
您可以看到着色语言仅为 3.3,低于我的要求。在 i7 6700 上,它是 4.5。
这很奇怪,因为:
- GLSL 应与 OpenGL 版本匹配
- 英特尔规格称 i7-4770T 至少应该支持 OpenGL 4.3。
可惜"MESA_GLSL_VERSION_OVERRIDE"
不起作用。我的应用程序运行时仍然会出现异常,例如 GUI 上出现随机黑色或紫色。
Mesa 是基于 libdrm-2.4.96 构建的,并具有此配置。
/autogen.sh --enable-debug --with-egl-platforms=x11,drm --with-dri-drivers=i915,i965,nouveau --with-gallium-drivers=i915,nouveau --disable-gallium-llvm --prefix=/usr
请帮我解决这个问题
答案1
我发现内核升级可以修复这个问题。对我来说是 4.8.16。另一个技巧是,如果你设置了多显示器,则更改主显示器。这让我抓狂了好几天。