c++ - 在 OSX Big Sur 上使用 OpenGL 4.x 进行开发

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

据苹果称,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 的代理库。到目前为止,目前已知的选项:

  • Apple 在 Metal 上的 OpenGL 实现 .
    不幸的是,它一直停留在 OpenGL 4.1 ,并且没有理由期望版本会长大;该库甚至可以在一些较新的 macOS 中删除。
    您可能已经注意到,现代 macOS 版本的系统库提供的信息提到了 Metal,因此它已经是其他图形 API 的包装器(尽管 Apple 可能会通过访问某些内部结构来作弊)。
  • MoltenVK , 一个开源 火神 1.1 通过 实现金属 .
    这不是一个 OpenGL 库,但 Vulkan 是另一个多平台图形 API,一些引用资料表明,当前状态下的 MoltenVK 足以在实际项目中使用,并且 Vulkan 1.1 预计将提供比过时的 OpenGL 4.1 更多的功能(尽管,我无法亲自证实这一点,只是我的期望)。
  • MoltenGL , 闭源 OpenGL ES 2.0 实现 金属 .
    由于当前的实现仅限于 OpenGL ES 2.0(例如远低于 Apple 的内置 OpenGL/OpenGL ES 库),它看起来非常无用...
  • 谷歌 ANGLE , 一个开源 OpenGL ES 通过其他 API 实现。
    到目前为止,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 ,一种基于 Vulkan 的开源 OpenGL 实现。
    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/

    相关文章:

    image - S3/DXT/BC 压缩和纹理格式

    c++ - OpenGL 问题 : cannot render geometry on screen

    c++ - 调用隐藏基类方法的最佳方式

    iOS/Mac 操作系统 : Saving and comparing CGPoints/NSPoints in Arrays

    c - 在 Mac OS X 10.11 上,如果与 .cu 扩展名一起使用,nvcc 不喜欢复杂

    macos - 操作系统 : How to force multiple-file-copy operation to plough through errors

    opengl - 图形管道的哪些部分是使用 CPU 和 GPU 完成的?

    c++ - 粒子系统的点 Sprite

    c++ - 如何将 .pgm 纹理文件加载到 openGL

    c++ - 初始化 std::pair<double, std::array<std::pair<double, double>, 3>>