From c794628a2ad58b978f02e26934c6c42953c24923 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 11 Jul 2013 21:51:09 -0700 Subject: [PATCH] Fixed bug 1958 - Cocoa SwapWindow doesn't swap the specified window Ryan C. Gordon We have this in Cocoa_GL_SwapWindow()... /* FIXME: Do we need to get the context for the window? */ [[NSOpenGLContext currentContext] flushBuffer]; ...which means if the current GL context is not the one in (window), we swap a different one than requested. Right now, we don't store information about which context is assigned to which window, and the OS doesn't give you a way to retrieve it from an NSView. We would have to track this per-window during SDL_GL_MakeCurrent() (and SDL_GL_CreateContext) calls. --- src/video/cocoa/SDL_cocoaopengl.m | 7 ++++--- src/video/cocoa/SDL_cocoawindow.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/video/cocoa/SDL_cocoaopengl.m b/src/video/cocoa/SDL_cocoaopengl.m index 84f89639d..35e74e328 100644 --- a/src/video/cocoa/SDL_cocoaopengl.m +++ b/src/video/cocoa/SDL_cocoaopengl.m @@ -212,6 +212,7 @@ SDL_WindowData *windowdata = (SDL_WindowData *)window->driverdata; NSOpenGLContext *nscontext = (NSOpenGLContext *)context; + windowdata->nscontext = nscontext; if ([nscontext view] != [windowdata->nswindow contentView]) { [nscontext setView:[windowdata->nswindow contentView]]; [nscontext update]; @@ -272,12 +273,12 @@ Cocoa_GL_SwapWindow(_THIS, SDL_Window * window) { NSAutoreleasePool *pool; - NSOpenGLContext *nscontext; + SDL_WindowData *windowdata = (SDL_WindowData *)window->driverdata; + NSOpenGLContext *nscontext = windowdata->nscontext; pool = [[NSAutoreleasePool alloc] init]; - /* FIXME: Do we need to get the context for the window? */ - [[NSOpenGLContext currentContext] flushBuffer]; + [nscontext flushBuffer]; [pool release]; } diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h index 180cd0e3f..d348c34d1 100644 --- a/src/video/cocoa/SDL_cocoawindow.h +++ b/src/video/cocoa/SDL_cocoawindow.h @@ -86,6 +86,7 @@ struct SDL_WindowData { SDL_Window *window; NSWindow *nswindow; + NSOpenGLContext *nscontext; SDL_bool created; Cocoa_WindowListener *listener; struct SDL_VideoData *videodata;