From 1f0b432a25f4300e3a2dddb29ab82a6e451913cb Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Wed, 5 Dec 2012 19:31:29 +0000 Subject: [PATCH] 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 (cherry picked from commit 2c0cfdefbb9d1ac5097d98887d3581b67a324fae) --- cogl/winsys/cogl-winsys-sdl2.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cogl/winsys/cogl-winsys-sdl2.c b/cogl/winsys/cogl-winsys-sdl2.c index 8c0c256ed..ca4f5fd73 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;