据苹果称,OpenGL is no longer supported .然而,它出现了v4.1的OpenGL was supported on many devices截至 2020 年 7 月 28 日。我有一个 2020 Macbook Pro 16"型号,它没有出现在上面提供的列表中。虽然我确定我的设备上存在某种形式的兼容性,但我不确定如何使用 OpenGL 进行开发当现代版本被弃用时。
我希望在运行 Big Sur 的 Macbook Pro 和我的 Windows 桌面之间进行开发。出于这个原因,我显然不希望关注特定于设备的库,例如 Direct3D 或 Metal。尽管 Apple 不直接提供支持,但是否可以使用较新版本的 OpenGL(例如 OpenGL 4.6)?我听说 AMD 显卡不能很好地与 OpenGL 配合使用,那么我还有什么选择呢?
最佳答案
macOS 上的内置 OpenGL 的工作方式与 Windows 或 Linux 等其他平台略有不同。在 Windows 上,系统提供 opengl32.dll
实际上并没有实现 OpenGL,而是一个代理库,从显卡供应商提供的驱动程序中动态加载函数。显卡供应商提供独立于 Microsoft 的驱动程序,OpenGL 功能可以在没有 Microsoft 批准的情况下实现。
相比之下, macOS 是更加封闭的系统,其中所有图形驱动程序都是系统的一部分,如果不更新系统本身,就无法(通常)更新。 Apple 拥有对系统中 OpenGL 功能的完全控制权,并且没有向显卡供应商提供任何方式来向用户提供更多最新的 OpenGL 功能(即使他们的硬件在其他系统上支持这些功能)。
对于多平台软件的开发人员来说,这是非常不愉快的情况,因为 Apple 稳步推进其特定于平台的 API,如 金属 作为唯一的选择,这意味着更强大的供应商锁定和/或更昂贵的开发。
直接使用特定于平台的 API 的另一种方法是使用在特定于平台的 API 之上实现多平台 API 的代理库。到目前为止,目前已知的选项:
不幸的是,它一直停留在 OpenGL 4.1 ,并且没有理由期望版本会长大;该库甚至可以在一些较新的 macOS 中删除。
您可能已经注意到,现代 macOS 版本的系统库提供的信息提到了 Metal,因此它已经是其他图形 API 的包装器(尽管 Apple 可能会通过访问某些内部结构来作弊)。
这不是一个 OpenGL 库,但 Vulkan 是另一个多平台图形 API,一些引用资料表明,当前状态下的 MoltenVK 足以在实际项目中使用,并且 Vulkan 1.1 预计将提供比过时的 OpenGL 4.1 更多的功能(尽管,我无法亲自证实这一点,只是我的期望)。
由于当前的实现仅限于 OpenGL ES 2.0(例如远低于 Apple 的内置 OpenGL/OpenGL ES 库),它看起来非常无用...
到目前为止,ANGLE 仅在 Metal 上实现了 OpenGL ES 2.0,在 Vulkan 上实现了 OpenGL ES 3.1(3.2 正在进行中)。因此,如果层不会炸毁,那么像 MoltenVK 这样的更多层理论上可以提供更多;)。然而,与 OpenGL 4.1 相比,即使是 OpenGL ES 3.2 看起来也不够好。还有 MetalANGLE - 添加 iOS 支持和一些额外功能的 ANGLE 库分支。
Zink 已经实现 OpenGL 4.6 在 Linux 上(支持的 OpenGL 版本取决于公开的 Vulkan 功能和扩展)。
有一项正在进行中的工作 台面镓驱动器 工作 on top of MoltenVK on macOS .
对我来说,看起来坚持 OpenGL 4.1 (由 Apple 提供)一段时间是一个很好的选择,以防您的应用程序可能会丢失某些需要更高版本 OpenGL 的功能。尽管 Apple 已经弃用了 SDK 中的 OpenGL,但到目前为止,在较新的 macOS 更新中将在不久的将来实际将其删除似乎是不现实的;偶Apple M1 GPU received OpenGL 4.1 support在 macOS Big Sur 上。不知道苹果是否有一些策略性的黑名单应用程序使用来自 AppStore 市场的弃用 API(例如系统将支持 OpenGL,但您将无法在 AppStore 上发布应用程序),但这可能会在 future 成为一个问题。替代 OpenGL 4.6 实现(在 Metal 之上或在 Vulkan-on-top-of-Metal 之上)可能会在遥远的 future 出现。
依托火神 -on-top-of-Metal 实现可能是最临时的选择,但肯定需要更多的努力来开发基于 Vulkan 而不是 OpenGL 的图形引擎。但是,无法评论当前的 MoltenVK 实现如何与 Windows 上相同图形硬件的 native Vulkan 实现相媲美(按功能/性能/限制)。当然,使用一些已经在多个图形 API(Vulkan/Metal/Direct3D/OpenGL/OpenGL ES)之上实现的现有图形引擎也会减轻您的维护负担,但这超出了初始问题的范围。
关于c++ - 在 OSX Big Sur 上使用 OpenGL 4.x 进行开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65802625/