mesa: Check/propagate return value on st_make_current.

Prevents segmentation fault when trying to set the viewport/scissor
after a context/drawable visual mismatch.
This commit is contained in:
José Fonseca 2009-05-30 12:41:14 -07:00
parent 29c6c8eb18
commit 8aef306c34
2 changed files with 11 additions and 8 deletions

View file

@ -263,9 +263,10 @@ void st_destroy_context( struct st_context *st )
}
void st_make_current(struct st_context *st,
struct st_framebuffer *draw,
struct st_framebuffer *read)
GLboolean
st_make_current(struct st_context *st,
struct st_framebuffer *draw,
struct st_framebuffer *read)
{
/* Call this periodically to detect when the user has begun using
* GL rendering from multiple threads.
@ -274,7 +275,8 @@ void st_make_current(struct st_context *st,
if (st) {
GLboolean firstTime = st->ctx->FirstTimeCurrent;
_mesa_make_current(st->ctx, &draw->Base, &read->Base);
if(!_mesa_make_current(st->ctx, &draw->Base, &read->Base))
return GL_FALSE;
/* Need to initialize viewport here since draw->Base->Width/Height
* will still be zero at this point.
* This could be improved, but would require rather extensive work
@ -286,9 +288,10 @@ void st_make_current(struct st_context *st,
_mesa_set_scissor(st->ctx, 0, 0, w, h);
}
return GL_TRUE;
}
else {
_mesa_make_current(NULL, NULL, NULL);
return _mesa_make_current(NULL, NULL, NULL);
}
}

View file

@ -91,9 +91,9 @@ void *st_framebuffer_private( struct st_framebuffer *stfb );
void st_unreference_framebuffer( struct st_framebuffer *stfb );
void st_make_current(struct st_context *st,
struct st_framebuffer *draw,
struct st_framebuffer *read);
GLboolean st_make_current(struct st_context *st,
struct st_framebuffer *draw,
struct st_framebuffer *read);
struct st_context *st_get_current(void);