GLX: Allow vendor library control of the GL dispatch table

Created by: kbrenneman

This extends the libGLX vendor library interface to give a vendor library more-or-less direct control of the current GL dispatch table.

Rather than just setting a dispatch table for each context like with #85, this allows a vendor library to specify a dispatch table for each glXMakeCurrent call, and allows a vendor library to change the current dispatch table at any time as long as it owns the current context.

libGLX provides a function that the vendor library can call to create a new dispatch table. The vendor can then pass that dispatch table to libGLX to tell it to switch the current dispatch table.

In addition, there's a new optional callback that the vendor can provide to handle glXMakeCurrent calls, which returns the dispatch table to use for the current thread. If the vendor provides that callback, then libGLX will use it instead of the normal per-vendor dispatch table.

Merge request reports