【问题标题】:What does it mean that Apple doesn't support OpenGL?Apple 不支持 OpenGL 是什么意思?
【发布时间】:2020-09-26 01:00:23
【问题描述】:

我发现 Apple 从 MacOS Mojave 开始弃用了 OpenGL。

但是根据我对图形 API 的理解,我知道特定操作系统的图形驱动程序(支持特定图形 API)是由显卡供应商提供的(以可执行文件的形式),而不是预建在操作系统中。

OS厂商苹果不支持OpenGL库是什么意思?

像 AMD 这样的显卡供应商不能让他们的 MacOS 显卡驱动程序支持更高版本的 OpenGL 吗?

【问题讨论】:

标签: macos opengl deprecated


【解决方案1】:

像 AMD 这样的显卡供应商不能让他们的 MacOS 显卡驱动程序支持更高版本的 OpenGL 吗?

没有。

“驱动程序”是操作系统用来与某些硬件进行通信的一段代码。操作系统定义了一种与某些类型的驱动程序交互的方法,而这些类型的硬件制造商提供了操作系统定义的驱动程序 API 的实现。

在与硬件交互时,用户态代码可以与驱动程序完全在操作系统允许的范围内进行交互。

当您在 MacOS 上与 OpenGL 对话时,首先是在与 MacOS 对话。您的 OpenGL 函数调用进入操作系统。然后,操作系统将该 GL 函数调用转换为由图形驱动程序制造商实现的内部 API,然后操作系统调用该 API。任何结果都会从这些内部驱动程序 API 转换并转发给您。

从不直接与图形驱动程序对话; MacOS 始终充当您之间的中介。 MacOS 上的图形驱动程序不包含 OpenGL 实现; MacOS本身有一个实现,但它的一部分是由图形驱动程序提供的。

这就是为什么在 MacOS 上,实现支持的扩展列表缺少很多特定于供应商的扩展。如果您查看 Windows 或 Linux OpenGL 实现,AMD 和 NVIDIA 有很多它们支持的扩展。这些在 MacOS 上不存在,因为 MacOS 控制哪些扩展可用。

它不必那样做;它本可以允许驱动程序公开它想要的任何东西,这是在其他平台上完成的。但这些是这些平台做出的具体选择;他们没有必须那样做,Apple 也没有。

因此,如果 MacOS 不再包含 OpenGL 实现......那么它不再具有 OpenGL 实现。而且您无法与该内部驱动程序 API 通信,因为它属于操作系统,并且不允许您访问它。

而且显卡制造商无法插入后门或其他东西以允许您访问驱动程序,因为操作系统始终处于控制之中。操作系统拥有到硬件的接口。如果供应商试图创建一些绕过操作系统的钩子,我很确定苹果会对这些驱动程序说一些非常不愉快的事情。

【讨论】:

  • 感谢您的友好回答!这真的很有帮助。我只是想知道“OpenGL 是否与操作系统完全集成(如 Windows 的 Win32APi),因此操作系统成为与驱动程序通信的最重要和唯一的接口”。我可以这样理解吗?再次非常感谢。
  • 您可以创建一个将一个 API 转换为另一个 API 的 dylib。因此,像 meltVK 这样的东西接收 vulkan 调用,但将调用发送到 Metal 函数。不完美,你会失去一些性能,但似乎工作得很好。
猜你喜欢
  • 2012-11-29
  • 2015-01-22
  • 2014-03-08
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多