* Client-side GLX interface for current context management.
*/
-#ifdef HAVE_PTHREAD
#include <pthread.h>
-#endif
#include "glxclient.h"
-#ifdef GLX_USE_APPLEGL
-#include <stdlib.h>
-
-#include "apple_glx.h"
-#include "apple_glx_context.h"
-#endif
#include "glapi.h"
* Current context management and locking
*/
-#if defined( HAVE_PTHREAD )
-
_X_HIDDEN pthread_mutex_t __glXmutex = PTHREAD_MUTEX_INITIALIZER;
# if defined( GLX_USE_TLS )
# endif /* defined( GLX_USE_TLS ) */
-#elif defined( THREADS )
-
-#error Unknown threading method specified.
-
-#else
-
-/* not thread safe */
-_X_HIDDEN struct glx_context *__glXcurrentContext = &dummyContext;
-
-#endif
-
_X_HIDDEN void
__glXSetCurrentContextNull(void)
#endif
}
-_X_EXPORT GLXContext
+_GLX_PUBLIC GLXContext
glXGetCurrentContext(void)
{
struct glx_context *cx = __glXGetCurrentContext();
}
}
-_X_EXPORT GLXDrawable
+_GLX_PUBLIC GLXDrawable
glXGetCurrentDrawable(void)
{
struct glx_context *gc = __glXGetCurrentContext();
struct glx_context *gc = (struct glx_context *) gc_user;
struct glx_context *oldGC = __glXGetCurrentContext();
- /* XXX: If this is left out, then libGL ends up not having this
- * symbol, and drivers using it fail to load. Compare the
- * implementation of this symbol to _glapi_noop_enable_warnings(),
- * though, which gets into the library despite no callers, the same
- * prototypes, and the same compile flags to the files containing
- * them. Moving the definition to glapi_nop.c gets it into the
- * library, though.
- */
- (void)_glthread_GetID();
-
/* Make sure that the new context has a nonzero ID. In the request,
* a zero context ID is used only to mean that we bind to no current
* context.
return GL_FALSE;
}
- if (gc == NULL && (draw != None || read != None)) {
- __glXGenerateError(dpy, (draw != None) ? draw : read,
- BadMatch, X_GLXMakeContextCurrent);
- return False;
- }
- if (gc != NULL && (draw == None || read == None)) {
- __glXGenerateError(dpy, None, BadMatch, X_GLXMakeContextCurrent);
- return False;
- }
-
_glapi_check_multithread();
__glXLock();
__glXUnlock();
+ /* The indirect vertex array state must to be initialised after we
+ * have setup the context, as it needs to query server attributes.
+ */
+ if (gc && !gc->isDirect) {
+ __GLXattribute *state = gc->client_state_private;
+ if (state && state->array_state == NULL) {
+ glGetString(GL_EXTENSIONS);
+ glGetString(GL_VERSION);
+ __glXInitVertexArrayState(gc);
+ }
+ }
+
return GL_TRUE;
}
-_X_EXPORT Bool
+_GLX_PUBLIC Bool
glXMakeCurrent(Display * dpy, GLXDrawable draw, GLXContext gc)
{
return MakeContextCurrent(dpy, draw, draw, gc);
}
-_X_EXPORT
+_GLX_PUBLIC
GLX_ALIAS(Bool, glXMakeCurrentReadSGI,
(Display * dpy, GLXDrawable d, GLXDrawable r, GLXContext ctx),
(dpy, d, r, ctx), MakeContextCurrent)
-_X_EXPORT
+_GLX_PUBLIC
GLX_ALIAS(Bool, glXMakeContextCurrent,
(Display * dpy, GLXDrawable d, GLXDrawable r,
GLXContext ctx), (dpy, d, r, ctx), MakeContextCurrent)