So I've been debugging the MacOS issue with the ubersheva's help (thanks, I couldn't have done it without you), and what I've found merits some public feedback, I reckon.
The TL;DR first: The OpenGL implementation on MacOS forces me into one of three choices:
- 1) Dropping support for MacOS completely
- 2) Dropping support for OpenGL 2.0 completely, and instead requiring support for OpenGL 3.0
- 3) Spending more than a trivial amount of work and complexity (that also needs to be maintained) in order to support OpenGL 2.0 and 3.0 separately
While I'm sure there are many who would enthusiastically argue for option 1, I'd obviously like to avoid that if at all possible. I'm leaning towards option 2, both because it's less work, but also for technical reasons. Option 3
is available; it's not like supporting both 2.0 and 3.0 is weeks and months of work, but unless it's necessary I'd rather avoid both the work, and the resulting ugliness.
And that is the main reason for posting this: Are there any among you who require support for OpenGL 2.0? I do notice a few error reports now and then trickling in from OpenGL 2.0 users, but it's hard for me to determine how important this is for you. (Like, is it just to try the client out on an old PC just for the fun of it, or are you actually playing the game like that and would be totally locked out without it?) I realize of course that not everyone will see this, and perhaps those that need support for OpenGL 2.0 don't even know how to find out, but I can't think of anything better than to ask. For those of you who see this post, please pass it on to anyone else you know in-game who might be affected!
As for the technical details: It turns out that MacOS effectively has two separate OpenGL implementations: one that supports OpenGL 2.0 strictly and not a single feature that comes after it, and another that supports OpenGL 3.0 strictly with not one ounce of backwards compatibility, whereas most (all?) other implementations support a compatibility profile which includes the functionality from both. The client requires support for VAOs, which MacOS's 2.0 implementation does not support, but it also uses GLSL 1.20 in order to be compatible with pre-3.0 implementations, and MacOS's 3.0 implementation only supports GLSL >= 1.40 (which is all that the OpenGL 3.0 standard mandates). The difference compared to the standard client is that it actually still supports non-VAO rendering (even though VAOs are in fact supported even by far older OpenGL implementations than 3.0, but Apple nonetheless decided to not support it for whatever reason), but that is for pure legacy reasons and very definitely not something that I'm bringing back.
Arguing from pure principles, dropping OpenGL 2.0 support would be the nicest, as that would allow the client to only require an OpenGL core profile rather than an ugly compatibility profile, even though it doesn't
really even require any compatibility functionality. There are several different reasons why supporting OpenGL 2.0 and 3.0 separately is a bit complex. It's not just about only using functionality in the intersection of both of those, but there are other things that simply work differently between the two; for instance, sampling depth textures returns data in the
z component in OpenGL 2.0 and compatibility profiles, whereas in core profiles, it returns data in the
r component, and switching between these subtle differences depending on version not only feels quite unnecessary, but is also pretty error-prone since I won't even detect if I'm doing something wrong unless I do all testing separately on both versions.