Browse Source

Fixed bug 3513 - SDL_GL_SwapWindow does not return error status

Return an error code from SDL_GL_SwapWindow(), like the other SDL APIs.
Sam Lantinga 8 years ago
parent
commit
524bf3c282
38 changed files with 126 additions and 87 deletions
  1. 1 1
      include/SDL_video.h
  2. 1 1
      src/dynapi/SDL_dynapi_procs.h
  3. 3 3
      src/video/SDL_egl_c.h
  4. 1 1
      src/video/SDL_sysvideo.h
  5. 5 7
      src/video/SDL_video.c
  6. 1 1
      src/video/cocoa/SDL_cocoaopengl.h
  7. 2 1
      src/video/cocoa/SDL_cocoaopengl.m
  8. 3 3
      src/video/directfb/SDL_DirectFB_opengl.c
  9. 1 1
      src/video/directfb/SDL_DirectFB_opengl.h
  10. 2 0
      src/video/haiku/SDL_BWin.h
  11. 2 0
      src/video/haiku/SDL_bclipboard.cc
  12. 2 0
      src/video/haiku/SDL_bclipboard.h
  13. 2 0
      src/video/haiku/SDL_bevents.cc
  14. 2 0
      src/video/haiku/SDL_bevents.h
  15. 2 0
      src/video/haiku/SDL_bframebuffer.cc
  16. 2 0
      src/video/haiku/SDL_bframebuffer.h
  17. 2 0
      src/video/haiku/SDL_bkeyboard.cc
  18. 2 0
      src/video/haiku/SDL_bkeyboard.h
  19. 2 0
      src/video/haiku/SDL_bmodes.cc
  20. 2 0
      src/video/haiku/SDL_bmodes.h
  21. 54 51
      src/video/haiku/SDL_bopengl.cc
  22. 3 1
      src/video/haiku/SDL_bopengl.h
  23. 2 0
      src/video/haiku/SDL_bvideo.cc
  24. 2 0
      src/video/haiku/SDL_bvideo.h
  25. 2 0
      src/video/haiku/SDL_bwindow.cc
  26. 1 0
      src/video/haiku/SDL_bwindow.h
  27. 2 2
      src/video/mir/SDL_miropengl.c
  28. 1 1
      src/video/mir/SDL_miropengl.h
  29. 3 3
      src/video/pandora/SDL_pandora.c
  30. 2 1
      src/video/psp/SDL_pspgl.c
  31. 1 1
      src/video/psp/SDL_pspgl_c.h
  32. 1 1
      src/video/psp/SDL_pspvideo.h
  33. 1 1
      src/video/uikit/SDL_uikitopengles.h
  34. 2 1
      src/video/uikit/SDL_uikitopengles.m
  35. 5 2
      src/video/windows/SDL_windowsopengl.c
  36. 1 1
      src/video/windows/SDL_windowsopengl.h
  37. 2 1
      src/video/x11/SDL_x11opengl.c
  38. 1 1
      src/video/x11/SDL_x11opengl.h

+ 1 - 1
include/SDL_video.h

@@ -1195,7 +1195,7 @@ extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
  * \brief Swap the OpenGL buffers for a window, if double-buffering is
  *        supported.
  */
-extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window);
+extern DECLSPEC int SDLCALL SDL_GL_SwapWindow(SDL_Window * window);
 
 /**
  *  \brief Delete an OpenGL context.

+ 1 - 1
src/dynapi/SDL_dynapi_procs.h

@@ -595,7 +595,7 @@ SDL_DYNAPI_PROC(SDL_GLContext,SDL_GL_GetCurrentContext,(void),(),return)
 SDL_DYNAPI_PROC(void,SDL_GL_GetDrawableSize,(SDL_Window *a, int *b, int *c),(a,b,c),)
 SDL_DYNAPI_PROC(int,SDL_GL_SetSwapInterval,(int a),(a),return)
 SDL_DYNAPI_PROC(int,SDL_GL_GetSwapInterval,(void),(),return)
-SDL_DYNAPI_PROC(void,SDL_GL_SwapWindow,(SDL_Window *a),(a),)
+SDL_DYNAPI_PROC(int,SDL_GL_SwapWindow,(SDL_Window *a),(a),return)
 SDL_DYNAPI_PROC(void,SDL_GL_DeleteContext,(SDL_GLContext a),(a),)
 SDL_DYNAPI_PROC(int,SDL_vsscanf,(const char *a, const char *b, va_list c),(a,b,c),return)
 SDL_DYNAPI_PROC(int,SDL_GameControllerAddMappingsFromRW,(SDL_RWops *a, int b),(a,b),return)

+ 3 - 3
src/video/SDL_egl_c.h

@@ -96,14 +96,14 @@ extern void SDL_EGL_DestroySurface(_THIS, EGLSurface egl_surface);
 /* These need to be wrapped to get the surface for the window by the platform GLES implementation */
 extern SDL_GLContext SDL_EGL_CreateContext(_THIS, EGLSurface egl_surface);
 extern int SDL_EGL_MakeCurrent(_THIS, EGLSurface egl_surface, SDL_GLContext context);
-extern void SDL_EGL_SwapBuffers(_THIS, EGLSurface egl_surface);
+extern int SDL_EGL_SwapBuffers(_THIS, EGLSurface egl_surface);
 
 /* A few of useful macros */
 
-#define SDL_EGL_SwapWindow_impl(BACKEND) void \
+#define SDL_EGL_SwapWindow_impl(BACKEND) int \
 BACKEND ## _GLES_SwapWindow(_THIS, SDL_Window * window) \
 {\
-    SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);\
+    return SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);\
 }
 
 #define SDL_EGL_MakeCurrent_impl(BACKEND) int \

+ 1 - 1
src/video/SDL_sysvideo.h

@@ -252,7 +252,7 @@ struct SDL_VideoDevice
     void (*GL_GetDrawableSize) (_THIS, SDL_Window * window, int *w, int *h);
     int (*GL_SetSwapInterval) (_THIS, int interval);
     int (*GL_GetSwapInterval) (_THIS);
-    void (*GL_SwapWindow) (_THIS, SDL_Window * window);
+    int (*GL_SwapWindow) (_THIS, SDL_Window * window);
     void (*GL_DeleteContext) (_THIS, SDL_GLContext context);
 
     /* * * */

+ 5 - 7
src/video/SDL_video.c

@@ -3382,22 +3382,20 @@ SDL_GL_GetSwapInterval(void)
     }
 }
 
-void
+int
 SDL_GL_SwapWindow(SDL_Window * window)
 {
-    CHECK_WINDOW_MAGIC(window,);
+    CHECK_WINDOW_MAGIC(window,-1);
 
     if (!(window->flags & SDL_WINDOW_OPENGL)) {
-        SDL_SetError("The specified window isn't an OpenGL window");
-        return;
+        return SDL_SetError("The specified window isn't an OpenGL window");
     }
 
     if (SDL_GL_GetCurrentWindow() != window) {
-        SDL_SetError("The specified window has not been made current");
-        return;
+        return SDL_SetError("The specified window has not been made current");
     }
 
-    _this->GL_SwapWindow(_this, window);
+    return _this->GL_SwapWindow(_this, window);
 }
 
 void

+ 1 - 1
src/video/cocoa/SDL_cocoaopengl.h

@@ -58,7 +58,7 @@ extern void Cocoa_GL_GetDrawableSize(_THIS, SDL_Window * window,
                                      int * w, int * h);
 extern int Cocoa_GL_SetSwapInterval(_THIS, int interval);
 extern int Cocoa_GL_GetSwapInterval(_THIS);
-extern void Cocoa_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window);
 extern void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context);
 
 #endif /* SDL_VIDEO_OPENGL_CGL */

+ 2 - 1
src/video/cocoa/SDL_cocoaopengl.m

@@ -383,13 +383,14 @@ Cocoa_GL_GetSwapInterval(_THIS)
     return status;
 }}
 
-void
+int
 Cocoa_GL_SwapWindow(_THIS, SDL_Window * window)
 { @autoreleasepool
 {
     SDLOpenGLContext* nscontext = (SDLOpenGLContext*)SDL_GL_GetCurrentContext();
     [nscontext flushBuffer];
     [nscontext updateIfNeeded];
+    return 0;
 }}
 
 void

+ 3 - 3
src/video/directfb/SDL_DirectFB_opengl.c

@@ -246,7 +246,7 @@ DirectFB_GL_GetSwapInterval(_THIS)
     return 0;
 }
 
-void
+int
 DirectFB_GL_SwapWindow(_THIS, SDL_Window * window)
 {
     SDL_DFB_WINDOWDATA(window);
@@ -273,9 +273,9 @@ DirectFB_GL_SwapWindow(_THIS, SDL_Window * window)
         }
 
     SDL_DFB_CHECKERR(windata->window_surface->Flip(windata->window_surface,NULL,  DSFLIP_PIPELINE |DSFLIP_BLIT | DSFLIP_ONSYNC ));
-    return;
+    return 0;
   error:
-    return;
+    return -1;
 }
 
 void

+ 1 - 1
src/video/directfb/SDL_DirectFB_opengl.h

@@ -50,7 +50,7 @@ extern int DirectFB_GL_MakeCurrent(_THIS, SDL_Window * window,
                                    SDL_GLContext context);
 extern int DirectFB_GL_SetSwapInterval(_THIS, int interval);
 extern int DirectFB_GL_GetSwapInterval(_THIS);
-extern void DirectFB_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int DirectFB_GL_SwapWindow(_THIS, SDL_Window * window);
 extern void DirectFB_GL_DeleteContext(_THIS, SDL_GLContext context);
 
 extern void DirectFB_GL_FreeWindowContexts(_THIS, SDL_Window * window);

+ 2 - 0
src/video/haiku/SDL_BWin.h

@@ -668,3 +668,5 @@ private:
  *                         buffer provided by DirectConnected() is invalidated.
  */
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bclipboard.cc

@@ -93,3 +93,5 @@ SDL_bool BE_HasClipboardText(_THIS) {
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bclipboard.h

@@ -29,3 +29,5 @@ extern char *BE_GetClipboardText(_THIS);
 extern SDL_bool BE_HasClipboardText(_THIS);
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bevents.cc

@@ -37,3 +37,5 @@ void BE_PumpEvents(_THIS) {
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bevents.h

@@ -35,3 +35,5 @@ extern void BE_PumpEvents(_THIS);
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bframebuffer.cc

@@ -252,3 +252,5 @@ int32 BE_UpdateOnce(SDL_Window *window) {
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bframebuffer.h

@@ -43,3 +43,5 @@ extern int32 BE_DrawThread(void *data);
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bkeyboard.cc

@@ -186,3 +186,5 @@ void BE_SetKeyState(int32 bkey, int8 state) {
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bkeyboard.h

@@ -40,3 +40,5 @@ extern void BE_SetKeyState(int32 bkey, int8 state);
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bmodes.cc

@@ -329,3 +329,5 @@ int BE_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode){
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bmodes.h

@@ -44,3 +44,5 @@ extern int BE_SetDisplayMode(_THIS, SDL_VideoDisplay *display,
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 54 - 51
src/video/haiku/SDL_bopengl.cc

@@ -38,40 +38,40 @@ extern "C" {
 #define BGL_FLAGS BGL_RGB | BGL_DOUBLE
 
 static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) {
-	return ((SDL_BWin*)(window->driverdata));
+    return ((SDL_BWin*)(window->driverdata));
 }
 
 static SDL_INLINE SDL_BApp *_GetBeApp() {
-	return ((SDL_BApp*)be_app);
+    return ((SDL_BApp*)be_app);
 }
 
 /* Passing a NULL path means load pointers from the application */
 int BE_GL_LoadLibrary(_THIS, const char *path)
 {
 /* FIXME: Is this working correctly? */
-	image_info info;
-			int32 cookie = 0;
-	while (get_next_image_info(0, &cookie, &info) == B_OK) {
-		void *location = NULL;
-		if( get_image_symbol(info.id, "glBegin", B_SYMBOL_TYPE_ANY,
-				&location) == B_OK) {
-
-			_this->gl_config.dll_handle = (void *) info.id;
-			_this->gl_config.driver_loaded = 1;
-			SDL_strlcpy(_this->gl_config.driver_path, "libGL.so",
-					SDL_arraysize(_this->gl_config.driver_path));
-		}
-	}
-	return 0;
+    image_info info;
+            int32 cookie = 0;
+    while (get_next_image_info(0, &cookie, &info) == B_OK) {
+        void *location = NULL;
+        if( get_image_symbol(info.id, "glBegin", B_SYMBOL_TYPE_ANY,
+                &location) == B_OK) {
+
+            _this->gl_config.dll_handle = (void *) info.id;
+            _this->gl_config.driver_loaded = 1;
+            SDL_strlcpy(_this->gl_config.driver_path, "libGL.so",
+                    SDL_arraysize(_this->gl_config.driver_path));
+        }
+    }
+    return 0;
 }
 
 void *BE_GL_GetProcAddress(_THIS, const char *proc)
 {
-	if (_this->gl_config.dll_handle != NULL) {
-		void *location = NULL;
-		status_t err;
-		if ((err =
-			get_image_symbol((image_id) _this->gl_config.dll_handle,
+    if (_this->gl_config.dll_handle != NULL) {
+        void *location = NULL;
+        status_t err;
+        if ((err =
+            get_image_symbol((image_id) _this->gl_config.dll_handle,
                               proc, B_SYMBOL_TYPE_ANY,
                               &location)) == B_OK) {
             return location;
@@ -79,52 +79,53 @@ void *BE_GL_GetProcAddress(_THIS, const char *proc)
                 SDL_SetError("Couldn't find OpenGL symbol");
                 return NULL;
         }
-	} else {
-		SDL_SetError("OpenGL library not loaded");
-		return NULL;
-	}
+    } else {
+        SDL_SetError("OpenGL library not loaded");
+        return NULL;
+    }
 }
 
 
 
 
-void BE_GL_SwapWindow(_THIS, SDL_Window * window) {
+int BE_GL_SwapWindow(_THIS, SDL_Window * window) {
     _ToBeWin(window)->SwapBuffers();
+    return 0;
 }
 
 int BE_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) {
-	_GetBeApp()->SetCurrentContext(((SDL_BWin*)context)->GetGLView());
-	return 0;
+    _GetBeApp()->SetCurrentContext(((SDL_BWin*)context)->GetGLView());
+    return 0;
 }
 
 
 SDL_GLContext BE_GL_CreateContext(_THIS, SDL_Window * window) {
-	/* FIXME: Not sure what flags should be included here; may want to have
-	   most of them */
-	SDL_BWin *bwin = _ToBeWin(window);
-	bwin->CreateGLView(BGL_FLAGS);
-	return (SDL_GLContext)(bwin);
+    /* FIXME: Not sure what flags should be included here; may want to have
+       most of them */
+    SDL_BWin *bwin = _ToBeWin(window);
+    bwin->CreateGLView(BGL_FLAGS);
+    return (SDL_GLContext)(bwin);
 }
 
 void BE_GL_DeleteContext(_THIS, SDL_GLContext context) {
-	/* Currently, automatically unlocks the view */
-	((SDL_BWin*)context)->RemoveGLView();
+    /* Currently, automatically unlocks the view */
+    ((SDL_BWin*)context)->RemoveGLView();
 }
 
 
 int BE_GL_SetSwapInterval(_THIS, int interval) {
-	/* TODO: Implement this, if necessary? */
-	return 0;
+    /* TODO: Implement this, if necessary? */
+    return 0;
 }
 
 int BE_GL_GetSwapInterval(_THIS) {
-	/* TODO: Implement this, if necessary? */
-	return 0;
+    /* TODO: Implement this, if necessary? */
+    return 0;
 }
 
 
 void BE_GL_UnloadLibrary(_THIS) {
-	/* TODO: Implement this, if necessary? */
+    /* TODO: Implement this, if necessary? */
 }
 
 
@@ -132,17 +133,17 @@ void BE_GL_UnloadLibrary(_THIS) {
    mode changes (see SDL_bmodes.cc), but it doesn't seem to help, and is not
    currently in use. */
 void BE_GL_RebootContexts(_THIS) {
-	SDL_Window *window = _this->windows;
-	while(window) {
-		SDL_BWin *bwin = _ToBeWin(window);
-		if(bwin->GetGLView()) {
-			bwin->LockLooper();
-			bwin->RemoveGLView();
-			bwin->CreateGLView(BGL_FLAGS);
-			bwin->UnlockLooper();
-		}
-		window = window->next;
-	}
+    SDL_Window *window = _this->windows;
+    while(window) {
+        SDL_BWin *bwin = _ToBeWin(window);
+        if(bwin->GetGLView()) {
+            bwin->LockLooper();
+            bwin->RemoveGLView();
+            bwin->CreateGLView(BGL_FLAGS);
+            bwin->UnlockLooper();
+        }
+        window = window->next;
+    }
 }
 
 
@@ -217,3 +218,5 @@ void BE_GL_RebootContexts(_THIS) {
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 3 - 1
src/video/haiku/SDL_bopengl.h

@@ -36,7 +36,7 @@ extern int BE_GL_MakeCurrent(_THIS, SDL_Window * window,
                               SDL_GLContext context);
 extern int BE_GL_SetSwapInterval(_THIS, int interval);                  /* TODO */
 extern int BE_GL_GetSwapInterval(_THIS);                                /* TODO */
-extern void BE_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int BE_GL_SwapWindow(_THIS, SDL_Window * window);
 extern SDL_GLContext BE_GL_CreateContext(_THIS, SDL_Window * window);
 extern void BE_GL_DeleteContext(_THIS, SDL_GLContext context);
 
@@ -47,3 +47,5 @@ extern void BE_GL_RebootContexts(_THIS);
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bvideo.cc

@@ -173,3 +173,5 @@ void BE_VideoQuit(_THIS)
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bvideo.h

@@ -40,3 +40,5 @@ extern int BE_Available(void);
 #endif
 
 #endif
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 0
src/video/haiku/SDL_bwindow.cc

@@ -227,3 +227,5 @@ SDL_bool BE_GetWindowWMInfo(_THIS, SDL_Window * window,
 #endif
 
 #endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */

+ 1 - 0
src/video/haiku/SDL_bwindow.h

@@ -52,3 +52,4 @@ extern SDL_bool BE_GetWindowWMInfo(_THIS, SDL_Window * window,
 
 #endif
 
+/* vi: set ts=4 sw=4 expandtab: */

+ 2 - 2
src/video/mir/SDL_miropengl.c

@@ -31,12 +31,12 @@
 
 #include "SDL_mirdyn.h"
 
-void
+int
 MIR_GL_SwapWindow(_THIS, SDL_Window* window)
 {
     MIR_Window* mir_wind = window->driverdata;
 
-    SDL_EGL_SwapBuffers(_this, mir_wind->egl_surface);
+    return SDL_EGL_SwapBuffers(_this, mir_wind->egl_surface);
 }
 
 int

+ 1 - 1
src/video/mir/SDL_miropengl.h

@@ -34,7 +34,7 @@
 #define MIR_GL_GetSwapInterval SDL_EGL_GetSwapInterval
 #define MIR_GL_SetSwapInterval SDL_EGL_SetSwapInterval
 
-extern void
+extern int
 MIR_GL_SwapWindow(_THIS, SDL_Window* window);
 
 extern int

+ 3 - 3
src/video/pandora/SDL_pandora.c

@@ -774,15 +774,14 @@ PND_gl_getswapinterval(_THIS)
     return ((SDL_VideoData *) _this->driverdata)->swapinterval;
 }
 
-void
+int
 PND_gl_swapwindow(_THIS, SDL_Window * window)
 {
     SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
     SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
 
     if (phdata->egl_initialized != SDL_TRUE) {
-        SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
-        return;
+        return SDL_SetError("PND: GLES initialization failed, no OpenGL ES support");
     }
 
     /* Many applications do not uses glFinish(), so we call it for them */
@@ -792,6 +791,7 @@ PND_gl_swapwindow(_THIS, SDL_Window * window)
     eglWaitGL();
 
     eglSwapBuffers(phdata->egl_display, wdata->gles_surface);
+    return 0;
 }
 
 void

+ 2 - 1
src/video/psp/SDL_pspgl.c

@@ -174,10 +174,11 @@ PSP_GL_GetSwapInterval(_THIS)
     return _this->gl_data->swapinterval;
 }
 
-void
+int
 PSP_GL_SwapWindow(_THIS, SDL_Window * window)
 {
     eglSwapBuffers(_this->gl_data->display, _this->gl_data->surface);
+    return 0;
 }
 
 void

+ 1 - 1
src/video/psp/SDL_pspgl_c.h

@@ -40,7 +40,7 @@ extern void * PSP_GL_GetProcAddress(_THIS, const char *proc);
 extern int PSP_GL_MakeCurrent(_THIS,SDL_Window * window, SDL_GLContext context);
 extern void PSP_GL_SwapBuffers(_THIS);
 
-extern void PSP_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int PSP_GL_SwapWindow(_THIS, SDL_Window * window);
 extern SDL_GLContext PSP_GL_CreateContext(_THIS, SDL_Window * window);
 
 extern int PSP_GL_LoadLibrary(_THIS, const char *path);

+ 1 - 1
src/video/psp/SDL_pspvideo.h

@@ -88,7 +88,7 @@ SDL_GLContext PSP_GL_CreateContext(_THIS, SDL_Window * window);
 int PSP_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context);
 int PSP_GL_SetSwapInterval(_THIS, int interval);
 int PSP_GL_GetSwapInterval(_THIS);
-void PSP_GL_SwapWindow(_THIS, SDL_Window * window);
+int PSP_GL_SwapWindow(_THIS, SDL_Window * window);
 void PSP_GL_DeleteContext(_THIS, SDL_GLContext context);
 
 /* PSP on screen keyboard */

+ 1 - 1
src/video/uikit/SDL_uikitopengles.h

@@ -27,7 +27,7 @@ extern int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window,
                                 SDL_GLContext context);
 extern void UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window,
                                      int * w, int * h);
-extern void UIKit_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int UIKit_GL_SwapWindow(_THIS, SDL_Window * window);
 extern SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window);
 extern void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context);
 extern void *UIKit_GL_GetProcAddress(_THIS, const char *proc);

+ 2 - 1
src/video/uikit/SDL_uikitopengles.m

@@ -111,7 +111,7 @@ UIKit_GL_LoadLibrary(_THIS, const char *path)
     return 0;
 }
 
-void UIKit_GL_SwapWindow(_THIS, SDL_Window * window)
+int UIKit_GL_SwapWindow(_THIS, SDL_Window * window)
 {
     @autoreleasepool {
         SDLEAGLContext *context = (__bridge SDLEAGLContext *) SDL_GL_GetCurrentContext();
@@ -127,6 +127,7 @@ void UIKit_GL_SwapWindow(_THIS, SDL_Window * window)
          * We don't pump events here because we don't want iOS application events
          * (low memory, terminate, etc.) to happen inside low level rendering. */
     }
+    return 0;
 }
 
 SDL_GLContext

+ 5 - 2
src/video/windows/SDL_windowsopengl.c

@@ -766,12 +766,15 @@ WIN_GL_GetSwapInterval(_THIS)
     return retval;
 }
 
-void
+int
 WIN_GL_SwapWindow(_THIS, SDL_Window * window)
 {
     HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc;
 
-    SwapBuffers(hdc);
+    if (!SwapBuffers(hdc)) {
+        return WIN_SetError("SwapBuffers()");
+    }
+    return 0;
 }
 
 void

+ 1 - 1
src/video/windows/SDL_windowsopengl.h

@@ -62,7 +62,7 @@ extern int WIN_GL_MakeCurrent(_THIS, SDL_Window * window,
                               SDL_GLContext context);
 extern int WIN_GL_SetSwapInterval(_THIS, int interval);
 extern int WIN_GL_GetSwapInterval(_THIS);
-extern void WIN_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int WIN_GL_SwapWindow(_THIS, SDL_Window * window);
 extern void WIN_GL_DeleteContext(_THIS, SDL_GLContext context);
 extern void WIN_GL_InitExtensions(_THIS);
 extern SDL_bool WIN_GL_SetPixelFormatFrom(_THIS, SDL_Window * fromWindow, SDL_Window * toWindow);

+ 2 - 1
src/video/x11/SDL_x11opengl.c

@@ -783,13 +783,14 @@ X11_GL_GetSwapInterval(_THIS)
     }
 }
 
-void
+int
 X11_GL_SwapWindow(_THIS, SDL_Window * window)
 {
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
     Display *display = data->videodata->display;
 
     _this->gl_data->glXSwapBuffers(display, data->xwindow);
+    return 0;
 }
 
 void

+ 1 - 1
src/video/x11/SDL_x11opengl.h

@@ -63,7 +63,7 @@ extern int X11_GL_MakeCurrent(_THIS, SDL_Window * window,
                               SDL_GLContext context);
 extern int X11_GL_SetSwapInterval(_THIS, int interval);
 extern int X11_GL_GetSwapInterval(_THIS);
-extern void X11_GL_SwapWindow(_THIS, SDL_Window * window);
+extern int X11_GL_SwapWindow(_THIS, SDL_Window * window);
 extern void X11_GL_DeleteContext(_THIS, SDL_GLContext context);
 
 #endif /* SDL_VIDEO_OPENGL_GLX */