Fixed bug 1958 - Cocoa SwapWindow doesn't swap the specified window
authorSam Lantinga <slouken@libsdl.org>
Thu, 11 Jul 2013 21:51:09 -0700
changeset 7408 c50e165abfdf
parent 7407 db8a19d767d7
child 7409 8b5ae6ff6a49
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
src/video/cocoa/SDL_cocoawindow.h
--- a/src/video/cocoa/SDL_cocoaopengl.m	Thu Jul 11 23:59:09 2013 -0400
+++ b/src/video/cocoa/SDL_cocoaopengl.m	Thu Jul 11 21:51:09 2013 -0700
@@ -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];
 }
--- a/src/video/cocoa/SDL_cocoawindow.h	Thu Jul 11 23:59:09 2013 -0400
+++ b/src/video/cocoa/SDL_cocoawindow.h	Thu Jul 11 21:51:09 2013 -0700
@@ -86,6 +86,7 @@
 {
     SDL_Window *window;
     NSWindow *nswindow;
+    NSOpenGLContext *nscontext;
     SDL_bool created;
     Cocoa_WindowListener *listener;
     struct SDL_VideoData *videodata;