开始学习 OpenGL。在现代 Linux 上,所有这些概念有何关联?

Starting to learn OpenGL. On modern Linux, how are all these concepts related?

我开始学习 OpenGL,因为这是我选择的硕士学位课程的一部分。在class中,在MSWindows上实践了加速3D图形(也许实际使用的是DX3d而不是OpenGL,不确定)。然而,多年来我一直在使用 Linux,我确信它是正确的开发环境,只要您可以自由选择。但是,据我所知,加速 3D,特别是驱动程序和硬件支持,在 Linux 上是一团糟。所以,请帮我把下面的一堆概念整理成一个合理的结构,因为这是我唯一能看到和理解事物的方式。

  1. 首先是驱动程序。 NVIDIA 和 AMD 专有,加上 "nouveau" 和一些开放的 Radeon 驱动程序,以及一个实验性的 AMD 开放但仍然是官方的。好像说的很清楚了。

  2. 其次,有个东西叫"mesa"。那是什么?它是仅为免费驱动程序定义的,它是免费驱动程序项目的一部分,还是无论使用何种驱动程序都定义和需要的?

  3. 在 2) 的开发中,"opengl" 到底是什么,它包含在哪里:台面、驱动程序,还是其他东西?可以专有吗?

  4. 最后,鉴于以上三点,“在现代Linux系统上获取并安装OpenGL是什么意思?

OpenGL 是一个界面。要使用它,您需要一个实现。 OpenGL 有很多实现。因为每个实现都是不同的,所以当您 运行 使用不同的实现时,即使您的程序是相同的,您的程序也会有不同的行为。典型的带有硬件渲染器的 OpenGL 实现将包含一些 运行 在用户 space(动态库)中的代码,运行 在内核(设备驱动程序)中的代码, X.org 服务器(DDX 驱动程序)中的 运行 代码,以及显卡本身(固件)中的 运行 代码。那是四段不同的代码!

AMD 和 nVidia 为 Linux 提供专有的 OpenGL 实现。这些实现有 closed-source 个驱动程序,其中 taint the kernel, 这意味着如果出现问题,Linux 开发人员无法帮助您。它们支持最新的 OpenGL 版本(例如 4.5,如果您的硬件支持),并具有完整的兼容性配置文件支持。

Mesa 为 Linux 提供 open-source OpenGL 实现。此实现可以使用 Noveau 或 Radeon open-source 驱动程序,它们不会污染内核。 Mesa 也有一个软件实现,称为 llvmpipe,它 运行 仅在您的 CPU 上并且不需要驱动程序。它的速度快得令人印象深刻,但它甚至比过时的硬件实现要慢得多。 Mesa 最近开始支持 OpenGL 4.x 系列,但它需要一些时间才能通过发行版发布周期进行过滤,因此您更有可能看到 OpenGL 3.3——这仅适用于核心配置文件,您受到限制使用兼容性配置文件升级到 3.0(类似于它在 OS X 上的工作方式)。

由于 Mesa 开发人员对显卡文档和开发资源的访问权限有限,AMD 或 nVidia 卡上的 Mesa 实现通常比供应商的实现慢,而且它通常支持较少的 OpenGL 扩展。然而,Mesa 实现非常可靠,它不会污染你的内核,一些 Mesa 实现甚至 Valgrind-clean.

安装 OpenGL 只是意味着在您的系统上安装 OpenGL 实现(您知道,使用 dnfapt 或其他)。这通常意味着在供应商实施和 Mesa 实施之间进行选择...除了英特尔集成显卡,其中 Mesa 供应商实施。