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:List of AMD graphics processing units#Features overview
- 要查找 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
_dri.so 中的 driver
是驱动程序的实际名称。如果 Mesa 未能找到指定的驱动程序,它将回退到 llvmpipe
。
您还可以通过设置以下环境变量来使用 OpenGL 软件光栅化器
LIBGL_ALWAYS_SOFTWARE=true GALLIUM_DRIVER=driver
driver
可以是 softpipe
、llvmpipe
或 swr
。
llvmpipe
和 swr
比 softpipe
更快。OpenGL 通过 Vulkan (Zink)
来自 Mesa 文档
- Zink 驱动程序是一个 Gallium 驱动程序,它发出 Vulkan API 调用,而不是针对特定的 GPU 架构。这可以用于在仅支持 Vulkan 的设备上获得完整的桌面 OpenGL 支持。
如果您在默认的 OpenGL 驱动程序中遇到问题(例如 RadeonSI、Iris 等中的错误),您可以尝试使用 Zink 驱动程序。
根据这份 Phoronix 基准测试,与 RadeonSI 相比,某些应用程序的平均 FPS 可能会更低。
要在 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 下的兼容性/合规性非常有用。