OpenGL
摘自 Wikipedia:OpenGL:
- OpenGL (Open Graphics Library) 是一个跨语言、跨平台的应用程序编程接口(API),用于渲染 2D 和 3D 矢量图形。
可在Khronos上了解更多信息。
OpenGL 的开发已于 2017 年停止,取而代之的是 Vulkan,这是“下一代”API,可在较新的硬件上提供更高的性能。
安装
要运行使用 OpenGL 的应用程序,您需要为您的硬件(GPU 或 CPU)安装正确的驱动程序。
- 英特尔的GenN硬件不是指CPU的一代,而是指GPU的一代,这与CPU的一代不同。
- 要查找 AMD(和 ATI)GPU 系列,请查阅Wikipedia:List of AMD graphics processing units#Features overview。
- 要查找 NVIDIA GPU 的代号,请查看 Nouveau 项目中的代码列表。
- 与 Fedora Linux 的社区软件仓库不同,Arch Linux 不会为受专利保护的视频和音频编解码器提供“freeworld”软件包变体;标准 Mesa 软件包在编译时已启用所有相关编解码器,与 Fedora 的“freeworld”软件包相同。
Mesa 是一个开源的 OpenGL 实现,它不断更新以支持最新的 OpenGL 规范。它有一系列用于 Intel 图形处理器、AMDGPU(以前称为 ATI)和 NVIDIA GPU 的开源驱动程序。Mesa 还提供软件光栅器,例如 llvmpipe。
有两个 Mesa 软件包可选,每个软件包都有一组不同的驱动程序:
-
mesa包 mesa 是最新的 Mesa 软件包,其中包括用于较新硬件的大多数现代驱动程序:
-
r300: 适用于AMD的Radeon R300, R400, 和 R500 GPU。 -
r600: 适用于 AMD 的 Radeon R600 GPU,最高支持Northern Islands架构。由 AMD 官方支持。 -
radeonsi: 适用于 AMD 的 Southern Island GPU 及更高版本。由 AMD 官方支持。 -
nouveau: Nouveau是用于 NVIDIA GPU 的开源驱动程序。 -
virtio_gpu: 一个适用于 virtio 的虚拟 GPU 驱动程序,可与基于 QEMU 的 VMM(如 KVM 或 Xen)一起使用。 -
vmwgfx: 适用于 VMware 虚拟 GPU。 -
i915: 适用于英特尔的第 3 代硬件。 -
crocus: 适用于英特尔的第 4 代至第 7 代硬件。 -
iris: 适用于英特尔的第 8 代硬件及更高版本。由英特尔正式支持。 -
zink: 用于在 Vulkan 上运行 OpenGL 的 Gallium 驱动程序。 -
d3d12: 用于仅支持 D3D12(即 WSL)的设备上的 OpenGL 3.3 支持。 -
softpipe: 软件光栅器和参考 Gallium 驱动程序。 -
llvmpipe: 软件光栅化器,它使用 LLVM 生成 x86 JIT 代码,并且是多线程的。
-
-
mesa-amber包 是传统的 Mesa 软件包,其中包括用于旧硬件的经典(非 Gallium3D)驱动程序:
-
i830: 适用于英特尔的第 2 代硬件。与i965相同的二进制文件。 -
i915: 适用于英特尔的第 3 代硬件。与i965. 相同的二进制文件。 -
i965: 适用于英特尔的第 4 代至第 11 代硬件。由英特尔正式支持。 -
radeon: 适用于 AMD 的 Radeon R100 GPU。与r200相同的二进制文件。 -
r200: 适用于 AMD 的 Radeon R200 GPU。 -
nouveau_vieux: 适用于 NVIDIA NV04(Fahrenheit) 至 NV20(Kelvin) GPU。 -
swrast: 旧版软件光栅器
-
- 注意:使用 Mesa 时,系统会自动选择正确的驱动程序,因此安装软件包后无需配置。
- nvidia-utils包 是用于NVIDIA GPU 的专有驱动程序,其中包括关于 OpenGL 的实现。
验证安装
要验证您的 OpenGL 安装,您可以使用 mesa-utils包 eglinfo ,它应该显示如下输出(当然,根据您的设置,其值不同):
$ eglinfo -B
Wayland platform: EGL API version: 1.5 EGL vendor string: Mesa Project EGL version string: 1.5 EGL client APIs: OpenGL OpenGL_ES OpenGL core profile vendor: Intel OpenGL core profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL core profile version: 4.6 (Core Profile) Mesa 25.1.3-arch1.3 OpenGL core profile shading language version: 4.60 OpenGL compatibility profile vendor: Intel OpenGL compatibility profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL compatibility profile version: 4.6 (Compatibility Profile) Mesa 25.1.3-arch1.3 OpenGL compatibility profile shading language version: 4.60 OpenGL ES profile vendor: Intel OpenGL ES profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL ES profile version: OpenGL ES 3.2 Mesa 25.1.3-arch1.3 OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20 X11 platform: EGL API version: 1.5 EGL vendor string: Mesa Project EGL version string: 1.5 EGL client APIs: OpenGL OpenGL_ES OpenGL core profile vendor: Intel OpenGL core profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL core profile version: 4.6 (Core Profile) Mesa 25.1.3-arch1.3 OpenGL core profile shading language version: 4.60 OpenGL compatibility profile vendor: Intel OpenGL compatibility profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL compatibility profile version: 4.6 (Compatibility Profile) Mesa 25.1.3-arch1.3 OpenGL compatibility profile shading language version: 4.60 OpenGL ES profile vendor: Intel OpenGL ES profile renderer: Mesa Intel(R) UHD Graphics (CML GT2) OpenGL ES profile version: OpenGL ES 3.2 Mesa 25.1.3-arch1.3 OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20
在 X11 平台上,也可以使用glxinfo。
在同一个软件包中,您还可以使用 eglgears 或 glxgears_x11 (在 X11 上)或 eglgears_wayland (在 Wayland 上)作为基本 OpenGL 测试。运行程序时,您应该会看到 3 个旋转齿轮。
在驱动程序之间切换
Mesa
您可以使用以下环境变量覆盖用于应用程序的驱动程序:
MESA_LOADER_DRIVER_OVERRIDE=driver
默认情况下,Mesa 在 /lib/dri/ 中搜索驱动程序。您可以使用以下命令查看已安装的驱动程序列表。
$ ls /lib/dri/
driver_dri.so 中的 driver 是驱动程序的实际名称。如果 Mesa 无法找到指定的驱动程序,就会退回到 llvmpipe。
您还可以通过设置以下环境变量来使用 OpenGL 软件光栅器:
LIBGL_ALWAYS_SOFTWARE=true GALLIUM_DRIVER=driver
driver 可以是 softpipe, llvmpipe 或 swr。
llvmpipe 与 swr 比 softpipe 更快。Vulkan 上的 OpenGL (Zink)
来自 Mesa 文档:
- Zink 驱动程序是一个 Gallium 驱动程序,它能发出 Vulkan API 调用,而不是针对特定的 GPU 架构。它可用于在仅支持 Vulkan 的设备上获得完整的桌面 OpenGL 支持。
如果您在默认 OpenGL 驱动程序中遇到问题(RadeonSI、Iris 等中的错误),您可以尝试使用 Zink 驱动程序。
根据此 Phoronix 基准测试, 与 RadeonSI 相比,某些应用程序的平均 FPS 可能更低。
请注意,在使用 AMD 或 Intel DDX 驱动程序(分别为 xf86-video-amdgpu包 和 xf86-video-intel包)的 X 系统上,Zink 已无法开箱即用。上游开发者建议使用通用的 modesetting(4) DDX 驱动程序。[1] 或者,也可以通过设置以下环境变量来绕过此问题:
$ LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink
要在 NVIDIA 驱动程序上使用 Zink,请使用以下命令或类似命令:
$ env __GLX_VENDOR_LIBRARY_NAME=mesa __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink LIBGL_KOPPER_DRI2=1 application
故障排除
联想设备的 Mesa GPU 图形错误
Mesa 使用 CPU(llvmpipe)进行软件渲染,导致部分图形界面软件崩溃。可以通过进入 BIOS 设置,将显卡模式从独立显卡模式(Discrete Graphics)切换为动态显卡模式(Dynamic Graphics)来解决此问题(如果使用其他品牌的计算机,应选择允许在不同 GPU 之间切换的选项,而不是禁用集成显卡)。如果未安装主 GPU 的驱动程序,却期望集成显卡正常工作,则可能出现此问题。[2]