A simple explanation, as discussed is changing between ANGLE and opengl32 contexts. If ANGLE chooses OPENGL then the app needs to know ANGLE is making use of OpenGL behind the scenes. Or any of its extensions that query for native handles would be a crapshoot if you don't even know what the backend is. ANGLE could be more feature rich in this area and even offer an API that's separate from ES to deal with interoperability stuff. It's not just a way to like what, simulate mobile devices? It's more manageable for cross-platform games, etc. If it's good enough for browsers it's good enough for things like game systems. It can fill a role like Qt or wxWidgets does for window systems. My product is a game system (
https://swordofmoonlight.itch.io/k) so it doesn't feel right to implement it in terms of another game system. Even if there was a good option (I don't think so) it would be a bit of an identity/brand crisis I think. OpenGL is more neutral in that regard. The other alternatives to OpenGL (e.g. D3D, Vulkan) all have tradeoffs. ES seems best to me even though its trade off is being unavailable off mobile devices. ANGLE solves that. So I look at it more like filling a void in this space. P.S. As for why to introspect? If a problem arises, I want to act, not throw up my hands, it's more agile to do that in the app than ANGLE. If I need to interact with the backend in a way that's not accounted for through extensions, in theory I can. When it comes to OpenXR it needs a visual backend, I think it only interacts lightly with them, but I want to be certain I can meet its needs, and if something comes up ES can't express, I would first write code against the underlying GPU interface (e.g. D3D) and if that makes ANGLE's view incoherent, I will write patch code against ANGLE's internals. I think this just comes with any kind of proxy system. Anything like wxWidgets you have to be able to get under the hood or you can't even even use it. What it does is it gives a single paradigm in which to work, and when that paradigm breaks down then you have to write some exception code against the underlying system. It reduces the burden, but it's never perfect. You can't be expected to tie your hands or just give up on using the proxy layer entirely as your alternatives.