Ubuntu 19.04 上的 OpenGL/GLSL 4.5,英特尔集成显卡

Ubuntu 19.04 上的 OpenGL/GLSL 4.5,英特尔集成显卡

我似乎无法在配备英特尔集成显卡的 Ubuntu 19.04 上获得 OpenGL 4.5 支持。我是 OpenGL 的新手,正在尝试运行一些现有代码。

当尝试在 Python 中运行 OpenGL 代码时,RuntimeError 是:

RuntimeError: 0:1(10): error: GLSL 4.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES

该帖子的其余部分可能比较模糊,但我的基本问题是:我该如何解决这个问题?

如果我理解正确的话,您的 OpenGL 版本决定了支持哪些版本的 GLSL。您对 OpenGL 的支持由硬件决定,在这种情况下,您需要获取正确的驱动程序。

我的英特尔 CPU 提供 UHD Graphics 630,它(根据这一页) 应通过适当的驱动程序支持 OpenGL 4.5。

表格的屏幕截图,以防链接因某种原因失效

在全新安装的 Ubuntu 19.04 上glxinfo | grep "OpenGL version"返回OpenGL version string: 3.0 Mesa 19.0.8。我将其读为“Mesa 19.0.8 提供的 OpenGL 版本 3.0 实现”。在寻找解决方案时,我发现这个帖子askubuntu 提供了使用 ppa 升级 Ubuntu 上的英特尔显卡驱动程序的说明。详细信息请参阅该帖子,但要升级到新驱动程序,请执行以下操作:

sudo add-apt-repository ppa:oibaf/graphics-drivers

sudo apt update && sudo apt upgrade

现在glxinfo | grep "OpenGL version"给我的OpenGL version string: 3.0 Mesa 19.3.0-devel (git-ffb0d3a 2019-09-29 disco-oibaf-ppa)似乎是一个新的 Mesa 版本,但 OpenGL 仍然是 3.0 版本。也就是说,glxinfo | "OpenGL"我得到的完整输出是:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2) 
OpenGL core profile version string: 4.6 (Core Profile) Mesa 19.3.0-devel (git-ffb0d3a 2019-09-29 disco-oibaf-ppa)
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 19.3.0-devel (git-ffb0d3a 2019-09-29 disco-oibaf-ppa)
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 19.3.0-devel (git-ffb0d3a 2019-09-29 disco-oibaf-ppa)
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

其中显示核心配置文件版本和核心配置文件着色语言版本为 4.6?上面的终端输出中的核心条目和非核心条目之间有什么区别?

我可以发布 GLSL 代码,但我不认为它有用,因为这不是一个代码问题(我知道这个代码在具有正确 OpenGL 设置的机器上运行良好,设置是我所苦苦挣扎的部分!)

如果问题有问题,请标记,我会尝试解决。任何帮助都值得感激。谢谢!

答案1

发现这个问题得益于生存机器上面的评论。我使用的 PyGame 版本 (1.9.5) 创建了错误类型的上下文 (兼容性),不支持 GLSL 4.50。这是 PyGame 的一个已知问题,根据他们的 github,从 PyGame 2.0.0 开始已经修复。为了解决这个问题,我更新到了 PyGame 2.0.0.dev3,它允许你在创建上下文时强制使用正确版本的 OpenGL。参见有关详细信息,请参阅 StackOverflow 帖子(链接到相关的 github 问题)。

相关内容