Commit f4b78286 authored by Adam Jackson's avatar Adam Jackson 🎧

glx: Fix MakeCurrent with no drawables

GLX_ARB_create_context, which we aspire to support, allows making GL 3.0
or newer contexts current with null current drawables. Strictly this
might not be legal for pre-3.0 contexts, but there's no harm in allowing
it anyway.
Signed-off-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
parent e2e50c50
......@@ -560,19 +560,14 @@ DoMakeCurrent(__GLXclientState * cl,
__GLXdrawable *drawPriv = NULL;
__GLXdrawable *readPriv = NULL;
int error;
GLuint mask;
/*
** If one is None and the other isn't, it's a bad match.
*/
mask = (drawId == None) ? (1 << 0) : 0;
mask |= (readId == None) ? (1 << 1) : 0;
mask |= (contextId == None) ? (1 << 2) : 0;
/* Drawables but no context makes no sense */
if (!contextId && (drawId || readId))
return BadMatch;
if ((mask != 0x00) && (mask != 0x07)) {
/* If either drawable is null, the other must be too */
if ((drawId == None) != (readId == None))
return BadMatch;
}
/*
** Lookup old context. If we have one, it must be in a usable state.
......@@ -608,20 +603,20 @@ DoMakeCurrent(__GLXclientState * cl,
return BadAccess;
}
assert(drawId != None);
assert(readId != None);
drawPriv = __glXGetDrawable(glxc, drawId, client, &status);
if (drawPriv == NULL)
return status;
readPriv = __glXGetDrawable(glxc, readId, client, &status);
if (readPriv == NULL)
return status;
if (drawId) {
drawPriv = __glXGetDrawable(glxc, drawId, client, &status);
if (drawPriv == NULL)
return status;
}
}
else {
if (readId) {
readPriv = __glXGetDrawable(glxc, readId, client, &status);
if (readPriv == NULL)
return status;
}
} else {
/* Switching to no context. Ignore new drawable. */
glxc = 0;
drawPriv = 0;
readPriv = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment