[Mesa-dev] [RFC] Solution to libGL.so and libGLES*.so mess

Jakob Bornecrantz wallbraker at gmail.com
Thu Jan 20 07:06:48 PST 2011

On Sun, Jan 16, 2011 at 10:42 AM, Chia-I Wu <olvaffe at gmail.com> wrote:
> On Fri, Dec 31, 2010 at 5:38 PM, Chia-I Wu <olvaffe at gmail.com> wrote:
>> On Wed, Dec 29, 2010 at 3:50 AM, Chia-I Wu <olvaffe at gmail.com> wrote:
>>> Since the same-dispatch-offset-different-glx-opcodes functions are
>>> defined in GLX, glXGetProcAddress should be a better place to handle
>>> them specially than _glapi_get_proc_address is.  With that change, I
>>> am quite happy with the current status of shared glapi
>>>  http://cgit.freedesktop.org/~olv/mesa/log/?h=shared-glapi-2
>> I've created a diagram showing the differences between GLX and EGL in
>> terms of libraries, and showing where libglapi is used
>>  http://people.freedesktop.org/~olv/tmp/egl-current.png
>>  (the image size exceeds the list limit)
>> The diagram shows a default setup.  When --enable-shared-glapi is
>> given, libGL no longer defines _glapi* and libglapi will be used
>> exclusively.
> It has been a while.  If there is no objection, I will push the
> changes to master on Wednesday.

I'm sorry that I didn't bring this up earlier but it would be
theoretically possible with EGL to make GLES and Desktop GL current at
the same time using dlopen and symbol mangling.
const char* (*dglGetString)(GLenum);
const char* (*glesGetString)(GLenum);

eglMakeCurrent(gles_ctx, draw1, draw1);
eglMakeCurrent(dgl_ctx, draw2, draw2);

printf("%s", dglGetString(GL_VERSION));
printf("%s", glesGetString(GL_VERSION));

The above should be allowed since the spec says: "If the calling
thread already has a current context of the same client API type as
ctx, then that context is flushed and marked as no longer current."
and that OpenGLES and Desktop GL have different API types. But since
your changes there can only be one current of any GL type.

Cheers Jakob.

More information about the mesa-dev mailing list