Um, in the next sentence you list exactly what’s missing from core GL3 that would give it “support for D3D10 features”. I’m claiming that extensions are not equivalent to true support because you cannot rely on them between vendors.
My point is that there is a difference betweeen “support for D3D10 features” and “support for all D3D10 features.” OpenGL 3.0 has the former, not the latter, and nobody’s hiding that fact.
I’m bemoaning the progress of GL.
Then stop talking about vague nonsense like “D3D10 features” and start saying what specific features you want to have.
GL not including it in core is a huge deficiency along with the other D3D10 features that D3D10 has included in its API since release.
No, it is not. Something is a “huge” deficiency if it is useful. Like uniform buffers. Or being able to have vertex and fragment programs as separate objects that you can mix & match without long link times. And so on.
Again, real-world priorities are what matters, not some featureset that Microsoft decided was important.
What are the benefits to adopting GL3 instead of staying with 2.1?
Right now, all I know is that I lose compatibility with pre-SM4.0 hardware. For what, exactly?
Um, why would you lose compatibility with non-DX10 hardware?
The only way you would lose compatibility with lower hardware is if you actually use 3.0 only features without any form of fallbacks. And if you do that, then you are explicitly agreeing to DX10 hardware, just as sure as your use of glslang means that you are agreeing to use DX9 hardware.
If you want DX9 hardware support, you would need a GL 2.1 path. Or, if that’s too much work, make your GL 2.1 path your GL 3.0 path. That is, don’t rely on 3.0 features, but do create 3.0 GL contexts.
As for what you gain, did you not read the spec? Or the various non-spec lists of core GL 3.0 features? Those are what you gain. Or, since you like D3D comparisons, everything in D3D10 except for the things I mentioned. Plus some decent API features.
These are available as extensions on 2.1 implementations, but only to the degree that they are widely supported, as Jan points out. If you can create a 3.0 implementation, then the implementation is guaranteed to support these.
GL 3.0 isn’t good if you wanted actual API cleanup, but saying that it provides no hardware features is flat-out wrong.