[cogl/wip/cogl-1.14: 110/177] sdl: Bind the default window when currently bound window is destroyed



commit e0f5167540069d7320a34757c775346985d1f73a
Author: Neil Roberts <neil linux intel com>
Date:   Wed Dec 5 19:31:29 2012 +0000

    sdl: Bind the default window when currently bound window is destroyed
    
    Cogl always needs to have the context bound to something so that it
    can freely create resources such as textures even if there is no
    current window. When the currently bound SDLWindow is destroyed, SDL
    apparently explicitly unbinds the GL context. If something then later
    for example tries to create a texture Cogl would start getting GL
    errors and fail. To fix this the SDL winsys now just binds the dummy
    window before deiniting the currently bound onscreen.
    
    Reviewed-by: Robert Bragg <robert linux intel com>
    
    (cherry picked from commit 2c0cfdefbb9d1ac5097d98887d3581b67a324fae)

 cogl/winsys/cogl-winsys-sdl2.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/cogl/winsys/cogl-winsys-sdl2.c b/cogl/winsys/cogl-winsys-sdl2.c
index 8c0c256..ca4f5fd 100644
--- a/cogl/winsys/cogl-winsys-sdl2.c
+++ b/cogl/winsys/cogl-winsys-sdl2.c
@@ -388,7 +388,18 @@ _cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
       CoglContextSdl2 *sdl_context = context->winsys;
 
       if (sdl_context->current_window == sdl_onscreen->window)
-        sdl_context->current_window = NULL;
+        {
+          CoglDisplaySdl2 *sdl_display = context->display->winsys;
+
+          /* SDL explicitly unbinds the context when the currently
+           * bound window is destroyed. Cogl always needs a context
+           * bound so that for example it can create texture resources
+           * at any time even without flushing a framebuffer.
+           * Therefore we'll bind the dummy window. */
+          SDL_GL_MakeCurrent (sdl_display->dummy_window,
+                              sdl_display->context);
+          sdl_context->current_window = sdl_display->dummy_window;
+        }
 
       SDL_DestroyWindow (sdl_onscreen->window);
       sdl_onscreen->window = NULL;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]