SDL_GL_MakeCurrent: Only no-op redundant calls on *same* thread.
This ensures that we only no-op redundant calls if they're made on the same thread as the last MakeCurrent with those arguments. This should maek SDL behave better with multithreaded environments.
This commit is contained in:
parent
ea36ba4f4e
commit
ab91b4ce14
2 changed files with 6 additions and 1 deletions
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "SDL_messagebox.h"
|
||||
#include "SDL_shape.h"
|
||||
#include "SDL_thread.h"
|
||||
|
||||
/* The SDL video driver */
|
||||
|
||||
|
@ -301,6 +302,7 @@ struct SDL_VideoDevice
|
|||
/* Cache current GL context; don't call the OS when it hasn't changed. */
|
||||
SDL_Window *current_glwin;
|
||||
SDL_GLContext current_glctx;
|
||||
SDL_threadID current_glthread;
|
||||
|
||||
/* * * */
|
||||
/* Data private to this driver */
|
||||
|
|
|
@ -2730,6 +2730,7 @@ SDL_GL_CreateContext(SDL_Window * window)
|
|||
/* Creating a context is assumed to make it current in the SDL driver. */
|
||||
_this->current_glwin = window;
|
||||
_this->current_glctx = ctx;
|
||||
_this->current_glthread = SDL_ThreadID();
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
@ -2738,6 +2739,7 @@ int
|
|||
SDL_GL_MakeCurrent(SDL_Window * window, SDL_GLContext ctx)
|
||||
{
|
||||
int retval;
|
||||
SDL_threadID thread = SDL_ThreadID();
|
||||
|
||||
if (!ctx) {
|
||||
window = NULL;
|
||||
|
@ -2749,13 +2751,14 @@ SDL_GL_MakeCurrent(SDL_Window * window, SDL_GLContext ctx)
|
|||
}
|
||||
}
|
||||
|
||||
if ((window == _this->current_glwin) && (ctx == _this->current_glctx)) {
|
||||
if ((window == _this->current_glwin) && (ctx == _this->current_glctx) && (thread == _this->current_glthread)) {
|
||||
retval = 0; /* we're already current. */
|
||||
} else {
|
||||
retval = _this->GL_MakeCurrent(_this, window, ctx);
|
||||
if (retval == 0) {
|
||||
_this->current_glwin = window;
|
||||
_this->current_glctx = ctx;
|
||||
_this->current_glthread = thread;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue