Dev*_*yan 11 c++ opengl macos macos-big-sur
据 Apple 称,不再支持 OpenGL。但是,截至 2020 年 7 月 28 日,似乎许多设备都支持OpenGL v4.1。我有一个 2020 年的 Macbook Pro 16" 型号,它没有出现在上面提供的列表中。虽然我确定某种形式的兼容性存在于我的设备上,我不确定当现代版本被弃用时如何使用 OpenGL 进行开发。
我希望在运行 Big Sur 的 Macbook Pro 和我的 Windows 桌面之间进行开发。出于这个原因,我显然不希望关注特定于设备的库,例如 Direct3D 或 Metal。尽管 Apple 不直接提供支持,但是否可以使用较新版本的 OpenGL(例如 OpenGL 4.6)?我听说 AMD 显卡不能很好地与 OpenGL 配合使用,那么我还有什么选择呢?
gkv*_*311 16
macOS 上的内置 OpenGL 的工作方式与 Windows 或 Linux 等其他平台略有不同。在 Windows 上,系统提供的opengl32.dll实际上并不实现 OpenGL,而是从显卡供应商提供的驱动程序动态加载函数的代理库。显卡供应商提供独立于 Microsoft 的驱动程序,OpenGL 功能可以在没有 Microsoft 批准的情况下实施。
相比之下,macOS是一个更加封闭的系统,其中所有图形驱动程序都是系统的一部分,如果不更新系统本身,就无法(通常)更新。Apple 拥有对系统中 OpenGL 功能的完全控制权,并且没有向显卡供应商提供任何方式来向用户提供更多最新的 OpenGL 功能(即使他们的硬件在其他系统上支持这些功能)。
对于多平台软件的开发人员来说,这是非常不愉快的情况,因为 Apple 稳步推动他们的平台特定 API,如Metal作为唯一选择,这意味着更强大的供应商锁定和/或更昂贵的开发。
直接使用特定于平台的 API 的另一种方法是使用在特定于平台的 API 之上实现多平台 API 的代理库。到目前为止,目前已知的选项:
在我看来,如果您的应用程序可能会丢失一些需要更高版本 OpenGL 的功能,那么坚持使用OpenGL 4.1(由 Apple 提供)一段时间是一个不错的选择。尽管 Apple 已经弃用了 SDK 中的 OpenGL,但到目前为止,在较新的 macOS 更新中将在不久的将来实际将其删除似乎是不现实的;甚至Apple M1 GPU在 macOS Big Sur 上也获得了 OpenGL 4.1 支持。不知道苹果是否有一些策略黑名单应用程序使用来自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)之上实现的现有图形引擎也会减轻您的维护负担,但这超出了初始问题的范围。
Bil*_*ngs 16
@gkv311的回答相当全面。我将添加以下想法(全面披露,我是 MoltenVK 和 MoltenGL 项目的首席开发人员):
| 归档时间: |
|
| 查看次数: |
5659 次 |
| 最近记录: |