OpenGL
- OpenGL (开放图形库) 是一种跨语言、跨平台的应用程序编程接口 (API),用于渲染 2D 和 3D 矢量图形。
在 Khronos 了解更多。
OpenGL 的开发于 2017 年停止,转而支持 Vulkan,这是一种“下一代”API,可在较新的硬件上提供更高的性能。
安装
要运行使用 OpenGL 的应用程序,您需要为您的硬件(GPU 或 CPU)安装正确的驱动程序。
- 对于 AMD(和 ATI),建议使用开源驱动程序,除非您有充分的理由使用专有驱动程序。
- 对于 NVIDIA,建议使用专有驱动程序,尤其是对于 Kepler (NVE0/GKXXX) 系列之后的新显卡,并且通常可以获得更好的性能。
- Intel 的 GenN 硬件不是指 CPU 的代数,而是指 GPU 的代数,这与 CPU 的代数不同。
- 要查找 AMD(和 ATI)GPU 的系列,请查看 Wikipedia:AMD 显卡列表#功能概述
- 要查找 NVIDIA GPU 的代码名,请查看 Nouveau 项目的代码名列表
Mesa 是一个开源 OpenGL 实现,不断更新以支持最新的 OpenGL 规范。它拥有一系列用于 Intel 显卡、AMD(以前的 ATI)和 NVIDIA GPU 的开源驱动程序集合。Mesa 还提供了软件 光栅化器,例如 llvmpipe。
有两个 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
:适用于 Intel 的 Gen 3 硬件。crocus
:适用于 Intel 的 Gen 4 到 Gen 7 硬件。iris
:适用于 Intel 的 Gen 8 硬件及更高版本。Intel 官方支持。zink
:一种 Gallium 驱动程序,用于在 Vulkan 之上运行 OpenGL。d3d12
:在仅支持 D3D12 的设备(即 WSL)上支持 OpenGL 3.3。swrast
:一种传统的软件光栅化器。此驱动程序已在 Mesa 22.0.0[1] 中停止使用,但仍可在源代码中找到(ArchLinux 在 24.1.1[2] 中仍然包含它们)softpipe
:一种软件光栅化器和一个参考 Gallium 驱动程序。llvmpipe
:一种软件光栅化器,它使用 LLVM 进行 x86 JIT 代码生成并且是多线程的。
- mesa-amber 是传统的 Mesa 软件包,其中包含用于旧硬件的经典(非 Gallium3D)驱动程序
i830
:适用于 Intel 的 Gen 2 硬件。与i965
相同的二进制文件。i915
:适用于 Intel 的 Gen 3 硬件。与i965
相同的二进制文件。i965
:适用于 Intel 的 Gen 4 到 Gen 11 硬件。Intel 官方支持。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 实现。
- amdgpu-pro-oglpAUR 是 AMD GPU 的专有驱动程序。
验证
要验证您的 OpenGL 安装,您可以使用 mesa-utils eglinfo
,它应显示如下输出(当然,具体值取决于您的设置)
$ eglinfo -B
Wayland platform: EGL API version: 1.4 EGL vendor string: Mesa Project EGL version string: 1.4 EGL client APIs: OpenGL OpenGL_ES OpenGL compatibility profile vendor: Mesa Project OpenGL compatibility profile renderer: i915 (chipset: Pineview M) OpenGL compatibility profile version: 2.1 Mesa 23.1.5 OpenGL compatibility profile shading language version: 1.20 OpenGL ES profile vendor: Mesa Project OpenGL ES profile renderer: i915 (chipset: Pineview M) OpenGL ES profile version: OpenGL ES 2.0 Mesa 23.1.5 OpenGL ES profile shading language version: OpenGL ES GLSL ES 1.0.16 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: Mesa OpenGL core profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL core profile version: 4.5 (Core Profile) Mesa 23.1.5 OpenGL core profile shading language version: 4.50 OpenGL compatibility profile vendor: Mesa OpenGL compatibility profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL compatibility profile version: 4.5 (Compatibility Profile) Mesa 23.1.5 OpenGL compatibility profile shading language version: 4.50 OpenGL ES profile vendor: Mesa OpenGL ES profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL ES profile version: OpenGL ES 3.2 Mesa 23.1.5 OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20
在 X11 平台上,glxinfo
也有效。
从同一个软件包中,您还可以使用 eglgears_x11
或 glxgears
(在 X11 上)或 eglgears_wayland
(在 Wayland 上)作为基本的 OpenGL 测试。您应该在运行该程序时看到 3 个旋转的齿轮。
驱动程序切换
Mesa
您可以使用以下环境变量覆盖应用程序使用的驱动程序
MESA_LOADER_DRIVER_OVERRIDE=driver
默认情况下,Mesa 在 /lib/dri/
中搜索驱动程序。您可以使用以下命令查看已安装驱动程序的列表
$ ls /lib/dri/
driver
在 driver_dri.so
中是驱动程序的实际名称。如果 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 基准测试,在某些应用程序中,平均 FPS 可能低于 RadeonSI。
要在 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 application
开发
在代码中使用 OpenGL 需要函数加载器,请在 Khronos 了解更多信息。
OpenGL 硬件数据库
GPUInfo 提供用户报告的 GPU/驱动程序组合、支持的扩展、功能等。此信息对于验证特定硬件在 OpenGL 和 Vulkan 下的兼容性/合规性非常有用。