We
use runtime compiling to create our wrappers in case functionality is
not present.
Runtime compilation is more of an optimization, we could store the function pointers in a closure or global array or something instead (and in fact probably should store them differently to be handle multiple drivers on windows correctly, but making that correct/efficient would probably be harder even though not many people would need it.)
That is great, but how do more static languages that don’t
have this kind of control handle multiple versions of opengl?
In C/C++ you can call a function pointer exactly the same way as a normal function, so they usually just define a bunch of function pointers for the extension functions and initialize them all at once. Most people probably use a library like GLEW or GLEE for that.