--- ./nx-X11/programs/Xserver/GL/mesa/X/xf86glx.c.X.original 2015-02-13 14:03:44.680442769 +0100 +++ ./nx-X11/programs/Xserver/GL/mesa/X/xf86glx.c 2015-02-10 19:13:14.340665851 +0100 @@ -71,6 +71,10 @@ #include "glcontextmodes.h" +#ifdef NXAGENT_SERVER +#include "../main/WSDrawBuffer.h" +#endif + /* * This structure is statically allocated in the __glXScreens[] * structure. This struct is not used anywhere other than in @@ -95,6 +99,36 @@ NULL /* WrappedPositionWindow is overwritten */ }; +#ifdef NXAGENT_SERVER +WSDrawBufferPtr pWSDrawBuffer = NULL; + +void AddWSDrawBuffer(GLframebuffer *mesa_buffer) +{ + WSDrawBufferPtr prevWSDB; + WSDrawBufferPtr newWSDB; + WSDrawBufferPtr p; + + prevWSDB = NULL; + newWSDB = NULL; + p = pWSDrawBuffer; + while (p != NULL) { + prevWSDB = p; + if (prevWSDB -> DrawBuffer == mesa_buffer) { + return; + } + p = p -> next; + } + newWSDB = malloc(sizeof(WSDrawBufferRec)); + newWSDB -> DrawBuffer = mesa_buffer; + newWSDB -> next = NULL; + + if (pWSDrawBuffer == NULL) + pWSDrawBuffer = newWSDB; + else + prevWSDB -> next = newWSDB; +} +#endif + void *__glXglDDXScreenInfo(void) { return &__glDDXScreenInfo; } @@ -748,6 +782,10 @@ __MESA_buffer buf = (__MESA_buffer)glPriv->private; __GLXdrawablePrivate *glxPriv = (__GLXdrawablePrivate *)glPriv->other; +#ifdef NXAGENT_SERVER + AddWSDrawBuffer(& (buf -> xm_buf -> mesa_buffer) ); +#endif + /* Destroy Mesa's buffers */ if (buf->xm_buf) XMesaDestroyBuffer(buf->xm_buf); @@ -757,7 +795,7 @@ glPriv->frontBuffer.resize = buf->fbresize; __glXFree(glPriv->private); - glPriv->private = NULL; + glPriv->private = NULL; } __GLinterface *__MESA_createContext(__GLimports *imports,