KhronosGroup / OpenGL-Registry

OpenGL, OpenGL ES, and OpenGL ES-SC API and Extension Registry
677 stars 274 forks source link

[question] ABI other than the Linux ABI #601

Closed yshui closed 7 months ago

yshui commented 7 months ago

The ABI defined here specifically say it's "OpenGL Application Binary Interface for Linux". I would like to know:

  1. If there are other ABIs defined other than the Linux ABI?
  2. Where I can find those ABI specifications?
  3. If it makes sense to have those ABIs live in this repository?

(Some context, I was trying to find what symbols are guaranteed to be exported by libGL when I found this ABI specification, which is helpful. Since my code runs on more than just Linux, I'd like to know if this info is available for other platforms as well.)

oddhack commented 7 months ago

ABIs for other platforms are defined by the platform vendor and TBH, this document is no longer relevant - it is nearly two decades old. De-facto the OpenGL ABI for Linux is defined by Mesa, who provides the libraries that link with open source drivers. This is kept around only for historical purposes and I will tag it accordingly.

In the past, Microsoft's OpenGL ICD client library only provided OpenGL interfaces up through OpenGL 1.2 and a few extensions. I don't know if that's still the case in modern Windows OS, though. For Android you use OpenGL ES as supplied by Google.

yshui commented 7 months ago

@oddhack Thanks for the answer.

De-facto the OpenGL ABI for Linux is defined by Mesa.

Nowadays it's probably defined by libglvnd? Since most applications are linked against that instead of mesa. And libglvnd does export a different set of symbols.

oddhack commented 7 months ago

Best to ask the Mesa folks directly. I'm not really educated on the current state of the Linux OpenGL stack.

cubanismo commented 6 months ago

Catching up on email: Yes, the ABI is effectively defined by GLVND (the OpenGL Vendor-Neutral Dispatch Library) these days. It serves as the equivalent of the Vulkan loader for OpenGL and OpenGL ES, as well as the GLX and EGL window system bindings on Linux. Some good references for GLVND in case Google lands anyone here in the future:

Official GLVND repository, with quite a bit of relevant documentation in its Readme.md:

https://gitlab.freedesktop.org/glvnd/libglvnd

GLVND is based on roughly the design outlined by Andy Ritger's new Linux OpenGL ABI proposal document:

https://github.com/aritger/linux-opengl-abi-proposal/blob/master/linux-opengl-abi-proposal.txt