Nic*_*ick 5 opengl graphics-card drivers nvidia-graphics-card
我安装了最新的专有 Nvidia 驱动程序,即 nvidia-415(根据“驱动程序管理器”界面)。有些程序抱怨我没有 OpenGL 3.3。
所以我运行命令来检查:
$ glxinfo | grep "OpenGL version"
OpenGL version string: 3.0 Mesa 12.0.6
OpenGL core profile version string: 4.3 (Core Profile) Mesa 12.0.6
Run Code Online (Sandbox Code Playgroud)
好的,看起来我的版本是 3.0。但是,当我看到 Mesa 时,它被称为“图形堆栈”,并且包括 FOSS nvidia 驱动程序和最新的 OpenGL。
还有一个“核心配置版本”,即 4.3。那我现在是4.3还是3.0呢?
所以现在我很困惑。专有的 Nvidia 驱动程序可以与 Mesa OpenGL 一起使用吗?或者 nouveau 开源驱动程序仅适用于 Mesa 的 open GL,我应该安装 Nvidia 的非 mesa 专有 OpenGL 来使用他们的专有驱动程序?
我将从一个简短的 API 定义开始,然后从那里向下移动,以确保涵盖所有基础内容。下面还有一个 TL;DR。
首先,OpenGL 描述了一种抽象的、与语言无关的 API,旨在促进轻松访问机器的图形功能。这使得软件开发人员(例如视频游戏开发人员)能够在较低级别与硬件进行有效的交互,从而确保速度、可靠性和编程的简易性等。具体来说,如果软件开发人员想要直接与图形硬件对话,他们需要用汇编语言或其他硬件级语言编写代码,这些代码编写起来既麻烦又耗时。相反,OpenGL 允许使用高级OpenGL 着色语言,这种语言更容易使用,并且可以被认为只是“高于”使用其自己的语言与硬件对话的一步。这意味着对硬件的调用将非常快。
如上所述,OpenGL只是一个API的规范。OpenGL 提供了一个库及其安装(您在输出中看到的版本),但为了使这些工作正常进行,需要针对给定的操作系统实现它。这就是 Mesa 的用武之地。Mesa(又名 Mesa 3D)是开源的,并在许多 Linux 发行版中使用。它最初被认为只是 OpenGL 的一个实现,但现在它的功能远不止于此。它还实现了其他 API 规范,例如 OpenCL,并且与硬件驱动程序捆绑在一起。
到目前为止,我们的水平已经比较高了。Mesa 和 OpenGL 规范只是应用程序(或游戏)和显卡硬件驱动程序之间的中间人,这是较低级别的。这里我们有几个选项,Mesa 将根据图形硬件制造商以及他们与开源计划的合作程度提供其中之一。例如,Intel 的集成显卡几乎总是使用 Mesa 来处理所有事情、OpenGL 实现和硬件驱动程序。英特尔直接贡献Mesa的源代码,以便整个图形解决方案可以是Mesa。另一方面,英伟达...
在与开源社区合作方面,英伟达一向很顽固,更愿意开发自己的闭源替代方案。这种固执导致莱纳斯·托瓦兹 (Linus Torvalds) 在一次采访中分享了他对公司的两点看法。就 Linux 而言,Nvidia 提供了自己的 OpenGL 实现以及自己的硬件驱动程序 - 所有都是闭源的。Nvidia 已经以开源方式发布了一些产品驱动程序,但这只是有限的产品范围。另一方面,Nouveau实际上是开源社区努力提供的硬件驱动程序,该驱动程序是故意从 Nvidia 的驱动程序版本进行逆向工程的。尽管这是一项勇敢的努力,但这通常意味着与 Nvidia 的专有堆栈相比,Nouveau 驱动程序中的新显卡功能必然落后,因为开源社区被迫迎头赶上。
在不知道确切的显卡型号的情况下,很难确定您的图形堆栈正在使用什么,但几乎可以肯定:
由于glxinfo它只是作为显示 OpenGL 实现的实用程序而无法访问硬件,因此您可以尝试查看使用的硬件驱动程序:
lspci -k | grep -EA3 'VGA|3D|Display'
Run Code Online (Sandbox Code Playgroud)
查找“正在使用的内核驱动程序”字段。然后获取有关该驱动程序的信息:
modinfo drivername
Run Code Online (Sandbox Code Playgroud)
您可能会得到大量输出,因此您只需检查其顶部的许可证即可确定它是 GPL 还是其他开源许可证。您不太可能将 Nvidia 内核空间驱动程序与 Mesa 一起使用。
| 归档时间: |
|
| 查看次数: |
2301 次 |
| 最近记录: |