Mac: Immediately update current OpenGL context's shape.

Previously we were postponing our -[NSOpenGLContext update] call to the next
SDL_GL_SwapWindow, even if the context was current on the current thread. This
changes it so that we will do the update immediately if it's the current
context.

If you're rendering on another thread, you need to call SDL_GL_SwapWindow once
after a resize event to ensure your drawable will produce non-garbage data.

Bug: https://bugzilla.libsdl.org/show_bug.cgi?id=2339

--HG--
extra : rebase_source : 3316bbdbaf00cbbec9bcdcc5ef3dd11b814b1dc9
extra : amend_source : 15988f6bf499cd6d4ffa914988805ab298ee7661
This commit is contained in:
Jørgen P. Tjernø 2014-02-25 15:28:12 -08:00
parent 83efc7045c
commit 7316ed4a8f
2 changed files with 16 additions and 3 deletions

View file

@ -110,11 +110,19 @@
if ([self view] != [windowdata->nswindow contentView]) {
[self setView:[windowdata->nswindow contentView]];
[self scheduleUpdate];
if (self == [NSOpenGLContext currentContext]) {
[self update];
} else {
[self scheduleUpdate];
}
}
} else {
[self clearDrawable];
[self scheduleUpdate];
if (self == [NSOpenGLContext currentContext]) {
[self update];
} else {
[self scheduleUpdate];
}
}
}

View file

@ -49,10 +49,15 @@ static void ConvertNSRect(NSRect *r)
static void
ScheduleContextUpdates(SDL_WindowData *data)
{
NSOpenGLContext *currentContext = [NSOpenGLContext currentContext];
NSMutableArray *contexts = data->nscontexts;
@synchronized (contexts) {
for (SDLOpenGLContext *context in contexts) {
[context scheduleUpdate];
if (context == currentContext) {
[context update];
} else {
[context scheduleUpdate];
}
}
}
}