-/* Set by glXMakeCurrent() and glXMakeContextCurrent() only */
+/**
+ * GLX API current context.
+ */
+#if defined(GLX_USE_TLS)
+PUBLIC __thread void * CurrentContext
+ __attribute__((tls_model("initial-exec")));
+#elif defined(THREADS)
+static _glthread_TSD ContextTSD; /**< Per-thread context pointer */
+#else
static GLXContext CurrentContext = 0;
-#define __glXGetCurrentContext() CurrentContext;
+#endif
+
+
+static void
+SetCurrentContext(GLXContext c)
+{
+#if defined(GLX_USE_TLS)
+ CurrentContext = context;
+#elif defined(THREADS)
+ _glthread_SetTSD(&ContextTSD, c);
+#else
+ CurrentContext = c;
+#endif
+}
/*
GET_DISPATCH(dpy, t);
if (!t)
return;
+ if (glXGetCurrentContext() == ctx)
+ SetCurrentContext(NULL);
(t->DestroyContext)(dpy, ctx);
}
GLXContext PUBLIC
glXGetCurrentContext(void)
{
+#if defined(GLX_USE_TLS)
return CurrentContext;
+#elif defined(THREADS)
+ return _glthread_GetTSD(&ContextTSD);
+#else
+ return CurrentContext;
+#endif
}
}
b = (*t->MakeCurrent)(dpy, drawable, ctx);
if (b) {
- CurrentContext = ctx;
+ SetCurrentContext(ctx);
}
return b;
}
return False;
b = (t->MakeContextCurrent)(dpy, draw, read, ctx);
if (b) {
- CurrentContext = ctx;
+ SetCurrentContext(ctx);
}
return b;
}