If you drop the dll, then you’d probably have to make the C-bindings into a real (and re-entrant) library. Real libraries are orthogonal(not coupled to other components(like the windowing system)) components that provide context creation (the ability to utilize multiple instances concurrently and across threads, and occasionally processes)).
Changes would be so drastic as to be a major version change.
Need to add the ability to manage a library context, which is passed (usually as the first parameter) to every method invocation. Windowing systems would need a way to bind a libcontext into what is currently a GLcontext. The change would eliminate the globals associated with the current context.
[ul][li] GL_LibraryContext* glCreateContext(/versioning?/)[] void glDeleteContext(GL_LibraryContext)[] boolean wglGLLibraryContextBindToControl(HANDLE control, GL_LibraryContext);[] same for agl, pgl, glX[/ul][/li]
All the regular glCalls would take an additional argument
[ul][li] void glBegin(GL_LibraryContext);[] void glEnd(GL_LibraryContext);[*] ecetera[/ul][/li]
The library would need to be made reentrant, which providing a library context facilitates the majority of that.
Returns from Error, and GetString, would need to point to unchanging memory locations.(Some implementations have glError returning the address of a global buffer, which is overwritten on every error. So if you were to call glError and get ErrorA and store the string pointer into a variable errstring, then if you continued and caused another error, the contents at errstring would be changed).
A few other changes and clean-up, but the cost is a little run-time efficiency. Since every function call now has a check for a valid context. Whereas before, all contexts were valid since they were controlled by the OS, (which would set a default context, so that all contextes were valid, eliminating the check). Among the benefits, is being able to use GL across threads, and signifigantly easier porting. As GL moves toward program-based rendering, the overhead of a few context checks will be mitigated.
The dll problem might also just be swept under the rug so to speak. Moving it to the OS’s problem instead of the application developers. The contexts used above, might still have to use the dlls, to find the functions and extensions.
So who’s with me, we can make a real library out of GL. Look at AL, it’s a real library(well it wasn’t completely re-entrant but that could have been fixed), just an abandoned one.