【问题标题】:Develop using OpenGL 4.x on OSX Big Sur在 OSX Big Sur 上使用 OpenGL 4.x 进行开发
【发布时间】:2021-04-24 09:49:55
【问题描述】:

据苹果公司称,OpenGL is no longer supported。但是,截至 2020 年 7 月 28 日,它出现 v4.1 of OpenGL was supported on many devices。我有一个 2020 Macbook Pro 16" 型号,它没有出现在上面提供的列表中。虽然我确信某种形式的兼容性存在于我的设备,当现代版本被弃用时,我不确定如何使用 OpenGL 进行开发。

我希望在运行 Big Sur 的 Macbook Pro 和我的 Windows 桌面之间进行开发。出于这个原因,我显然不希望专注于特定于设备的库,例如 Direct3D 或 Metal。尽管 Apple 不直接提供支持,是否可以使用较新版本的 OpenGL(例如 OpenGL 4.6)?我听说 AMD 显卡不能很好地与 OpenGL 配合使用,那么我还有哪些选择?

【问题讨论】:

    标签: c++ macos opengl macos-big-sur


    【解决方案1】:

    macOS 上的内置 OpenGL 与 Windows 或 Linux 等其他平台的工作方式略有不同。在 Windows 上,系统提供的opengl32.dll 实际上并没有实现 OpenGL,而是一个代理库,从显卡供应商提供的驱动程序动态加载函数。显卡供应商提供独立于 Microsoft 的驱动程序,无需 Microsoft 批准即可实施 OpenGL 功能。

    相比之下,ma​​cOS 是一个更加封闭的系统,所有图形驱动程序都是系统的一部分,如果不更新系统本身就无法(通常)更新。 Apple 完全控制系统中的 OpenGL 功能,并且不向显卡供应商提供任何方式来向用户提供更多最新的 OpenGL 功能(即使他们的硬件在其他系统上支持这些功能)。

    这对于多平台软件的开发人员来说是非常不愉快的情况,因为 Apple 稳步推动他们的平台特定 API,如 Metal 作为唯一选择,这意味着更强大的供应商锁定和/或更昂贵的开发。

    直接使用特定于平台的 API 的替代方法是使用代理库在特定于平台的 API 之上实现多平台 API。到目前为止,目前已知的选项:

    • Apple 在 Metal 上的 OpenGL 实现。 不幸的是,它一直停留在 OpenGL 4.1 上,没有理由期望该版本会增长;该库甚至可以在一些较新的 macOS 中删除。 您可能已经注意到,现代 macOS 版本上的系统库提供的信息提到了 Metal,因此它已经是其他图形 API 的包装器(尽管 Apple 可能会通过访问某些内部结构来作弊)。
    • MoltenVK,一个基于 Metal 的开源 Vulkan 1.1 实现。 这不是一个 OpenGL 库,但 Vulkan 是另一个多平台图形 API,一些参考资料表明 MoltenVK 在当前状态下足以在实际项目中使用,而且 Vulkan 1.1 有望提供比过时的 OpenGL 4.1 更多的功能(尽管,我无法亲自确认这一点,只是我的期望)。
    • MoltenGL,一种基于 Metal 的闭源 OpenGL ES 2.0 实现。 由于当前的实现仅限于 OpenGL ES 2.0(例如,远低于 Apple 的内置 OpenGL / OpenGL ES 库),它看起来毫无用处......
    • Google ANGLE,一种优于其他 API 的开源 OpenGL ES 实现。 到目前为止,ANGLE 仅在 Metal 上实现了 OpenGL ES 2.0,在 Vulkan 上实现了 OpenGL ES 3.1(3.2 正在进行中)。因此,如果层数不会爆炸,那么理论上可以提供更多像 MoltenVK 这样的层;)。然而,与 OpenGL 4.1 相比,即使 OpenGL ES 3.2 看起来也不够好。还有 MetalANGLE - 一个 ANGLE 库分支,添加了 iOS 支持和一些额外功能。
    • Zink,一个基于 Vulkan 的开源 OpenGL 实现。 Zink 已经在 Linux 上实现了 OpenGL 4.6(支持的 OpenGL 版本取决于公开的 Vulkan 功能和扩展)。 有一项工作正在进行中,使这个 Mesa 镓驱动器 可以正常工作on top of MoltenVK on macOS

    在我看来,如果您的应用程序可能会失去一些需要更高版本 OpenGL 的功能,那么坚持使用 OpenGL 4.1(Apple 提供)一段时间是一个不错的选择。尽管 Apple 已经在 SDK 中弃用了 OpenGL,但到目前为止,在最近的 macOS 更新中实际上将其删除似乎是不现实的;甚至是 macOS Big Sur 上的 Apple M1 GPU received OpenGL 4.1 support。不知道 Apple 是否有一些使用 AppStore 市场不推荐使用的 API 的策略将应用程序列入黑名单(例如系统将支持 OpenGL,但您将无法在 AppStore 上发布应用程序),但这可能会成为未来的问题。替代的 OpenGL 4.6 实现(在 Metal 之上或在 Vulkan-on-top-of-Metal 之上)可能会在遥远的将来出现。

    依靠 Vulkan-on-top-of-Metal 实现可能是最临时的选择,但在 Vulkan 而不是 OpenGL 之上开发图形引擎肯定需要更多的努力。但是,无法评论当前 MoltenVK 实现如何与 Windows 上相同图形硬件的原生 Vulkan 实现相媲美(按功能/性能/限制)。当然,使用已经在多个图形 API(Vulkan/Metal/Direct3D/OpenGL/OpenGL ES)之上实现的一些现有图形引擎也会减轻您的维护负担,但这超出了最初问题的范围。

    【讨论】:

    • 这就是我一直在寻找的答案,非常感谢!看来我的研究导致我没有解决方案是正确的,我只需要继续使用 OpenGL 4.1。感谢您提供详细和来源的答案!
    • 过去曾尝试在 macOS 上进行一些图形开发。 Apple 的 OpenGL 实现已经过时、错误且速度慢。目前only 选项是使用Metal。如果您喜欢游戏开发,您可以使用可以针对 macOS 的游戏引擎。但是,请记住,Mac 没有配备合适的显卡。因此,对于“酷”的东西来说,野外的所有 Mac 都太慢了。我的观点:如果你喜欢图形开发切换到 Windows/Linux,Apple 既不关心你也不想要你。
    • @adroste 完全同意——即使有几个相对较快的 GPU 配置,大多数 Apple 设备的板载 Intel 或类似 Intel 的图形都相当慢且无能。虽然在我的经验 中不能说OpenGL 的实现比在其他系统上的错误多得多——而是(恼人地)更严格 规范。但可能我的经验太有限/测试覆盖率太小。
    • 这个答案相当全面。我在这个问题的第二个答案中添加了一些额外的想法 (stackoverflow.com/a/66761752/1678054)。
    【解决方案2】:

    @gkv311 的answer 比较全面。我将添加以下想法(完全公开,我是 MoltenVK 和 MoltenGL 项目的首席开发人员)

    • 恕我直言,Vulkan 生态系统是您在最大数量的平台上进行面向未来的游戏开发的最佳选择。 Here 很好地总结了 API 分层选项,基于该方法,允许在 Vulkan 上运行 OpenGL 或 DX,和/或在 Metal、DX、OpenGL 等上运行 Vulkan。
    • 其中一些分层选项可以堆叠。例如,Zink 和 DXVK 可以在 MoltenVK 之上运行,提供 OpenGL-over-Vulkan-over-Metal 和 DX-over-Vulkan-over-Metal 功能。
    • 就 Vulkan 而言,MoltenVK 具有良好的性能和良好的行业牵引力,被许多从 Windows 起源移植的 AAA 游戏使用,或者在 Wine 上运行。如果有人有任何问题,或者想咨询其中一些游戏开发者,我建议在 MoltenVK Discussions 区域提问。
    • MetalANGLE 已成为 OpenGL ES 的另一个开源选项。

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 1970-01-01
      • 2022-11-30
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      相关资源
      最近更新 更多