Develop using OpenGL 4.x on OSX Big Sur

15,051

Solution 1

Built-in OpenGL on macOS works a little bit different from other platforms like Windows or Linux. On Windows, system-provided opengl32.dll doesn't actually implement OpenGL but is rather a proxy-library dynamically loading functions from a driver provided by a graphics card vendor. Graphics card vendors provide drivers independently from Microsoft and OpenGL capabilities can be implemented without Microsoft approval.

In contrast, macOS is much more closed system, where all graphic drivers are part of the system and cannot be (normally) updated without updating system itself. Apple holds the full control over OpenGL functionality in system and doesn't give graphics card vendors any way to deliver users more up-to-date OpenGL features (even when their hardware supports them on other systems).

This is quite unpleasant situation for a developer of multi-platform software, as Apple steadily pushes to their platform-specific APIs like Metal as the only choice, which implies a stronger vendor-lock and/or a more expensive development.

An alternative to using platform-specific APIs directly could be using a proxy-library implementing a multi-platform API on top of platform-specific API. So far, currently known options:

  • Apple's OpenGL implementation over Metal. Unfortunately, it has stuck on OpenGL 4.1, and there is no reason to expect the version will ever grow up; the library could be even removed in some newer macOS. You may already notice that information provided by a system library on modern macOS versions mentions Metal, so that it is already a wrapper over other graphics API (although Apple may cheat by accessing some internals).
  • MoltenVK, an open-source Vulkan 1.1 implementation over Metal. This is not an OpenGL library, but Vulkan is another multi-platform graphics API and some references tells that MoltenVK in current state is solid enough for using in real projects, and Vulkan 1.1 is expected to give more features than outdated OpenGL 4.1 (though, I cannot confirm this personally, just my expectations).
  • MoltenGL, a closed-source OpenGL ES 2.0 implementation over Metal. As current implementation is limited to OpenGL ES 2.0 (e.g. much lower than Apple's built-in OpenGL / OpenGL ES libraries), it looks quite useless...
  • Google ANGLE, an open-source OpenGL ES implementation over other APIs. So far, ANGLE implements only OpenGL ES 2.0 over Metal, and OpenGL ES 3.1 (3.2 in progress) over Vulkan. So that with more layers like MoltenVK it could theoretically give more, if layers will not blow up ;). However, even OpenGL ES 3.2 doesn't look good enough compared to OpenGL 4.1. There is also MetalANGLE - an ANGLE library fork adding iOS support and some extra features.
  • Zink, an open-source OpenGL implementation over Vulkan. Zink already implements OpenGL 4.6 on Linux (supported OpenGL version depends on exposed Vulkan features and extensions). There is a work-in-progress making this Mesa Gallium driver working on top of MoltenVK on macOS.

To me, it looks that sticking to OpenGL 4.1 (provided by Apple) for a while is quite a good option in case if your application may afford losing some features requiring higher version of OpenGL. Although Apple has deprecated OpenGL in SDK, so far it looks non-realistic that it will be actually removed in nearest future within newer macOS updates; even Apple M1 GPU received OpenGL 4.1 support on macOS Big Sur. Don't know if Apple has some strategy black-listing applications using deprecated APIs from AppStore market (e.g. system will support OpenGL, but you will not be able publishing application on AppStore), but this might become an issue in some future. Alternative OpenGL 4.6 implementations (on top of Metal or on top of Vulkan-on-top-of-Metal) might come in some distant future.

Relying on Vulkan-on-top-of-Metal implementations might be most provisional choice, but it will certainly require more efforts to develop a graphics engine on top of Vulkan instead of OpenGL. Cannot comment, though, how current MoltenVK implementation is comparable to native Vulkan implementations on Windows for the same graphics hardware (by features/performance/limitations). Of course, using some existing graphics engine already implemented on top of several graphics APIs (Vulkan/Metal/Direct3D/OpenGL/OpenGL ES) will also take this maintenance burden from you, but this is out of scope of initial question.

Solution 2

@gkv311's answer is quite comprehensive. I'll add the following thoughts (full disclosure, I am the lead dev on the MoltenVK and MoltenGL projects):

  • IMHO, the Vulkan eco-system is your best bet for future-proofing game dev across the largest number of platforms. Here is a good summary of API layering options, based on that approach, allowing options for running OpenGL or DX over Vulkan, and/or Vulkan over Metal, DX, OpenGL, etc.
  • Some of these layering options can be stacked. For instance, Zink and DXVK can run on top of MoltenVK, providing OpenGL-over-Vulkan-over-Metal and DX-over-Vulkan-over-Metal functionality.
  • As far as Vulkan goes, MoltenVK has good performance, and good industry traction, being used by a number of AAA games ported from Windows origins, or running on top of Wine. If anyone has any questions, or wants to query some of those game developers, I suggest asking a question in the MoltenVK Discussions area.
  • MetalANGLE has emerged as another open-source option for OpenGL ES.
Share:
15,051

Related videos on Youtube

DeveloperRyan
Author by

DeveloperRyan

Updated on June 23, 2022

Comments

  • DeveloperRyan
    DeveloperRyan almost 2 years

    According to Apple, OpenGL is no longer supported. However, it appears v4.1 of OpenGL was supported on many devices as of July 28, 2020. I have a 2020 Macbook Pro 16" model, which does not show up on the list provided above. While I am sure some form of compatibility exists on my device, I am unsure how I can develop with OpenGL when modern versions are deprecated.

    I wish to be developing between my Macbook Pro running Big Sur and my Windows desktop. For this reason, I obviously do not wish to focus on a device-specific library such as Direct3D or Metal. Is it possible to work with newer versions of OpenGL (such as OpenGL 4.6) despite support not being directly provided by Apple? I've heard AMD video cards do not play well with OpenGL, so what options am I left with?

  • DeveloperRyan
    DeveloperRyan over 3 years
    This is the answer I was looking for, thank you so much! It appears my research leading me to no solutions was correct and I will just have to continue with OpenGL 4.1. Thank you for the detailed and sourced answer!
  • adroste
    adroste about 3 years
    Tried to do some graphics dev on macOS in the past. Apple's OpenGL implementation is outdated, buggy and slow. The only option for now is to use Metal. If you're into game dev you can use game engines that can target macOS. However, keep in mind that Macs don't ship with proper graphic cards. So all the Macs in the wild are too slow anyway for the 'cool' stuff. My opinion: If you are into graphics dev switch to Windows/Linux, Apple neither cares about you nor wants you.
  • gkv311
    gkv311 about 3 years
    @adroste couldn't agree more - even if there are a couple of relatively fast GPU configurations, the majority of Apple devices have rather slow and incapable Intel or Intel-alike graphics onboard. Though couldn't say that OpenGL implementation was much buggier than on other systems in my experience - rather (annoyingly) stricter to specifications. But probably I have too limited experience / smaller test coverage.
  • Bill Hollings
    Bill Hollings about 3 years
    This answer is quite comprehensive. I've added some additional thoughts in a secondary answer to this question (stackoverflow.com/a/66761752/1678054).