diff mbox series

[v3,11/18] ui/sdl: get the GL context from the window

Message ID 20230313101207.375125-12-marcandre.lureau@redhat.com
State New
Headers show
Series ui: dbus & misc fixes | expand

Commit Message

Marc-André Lureau March 13, 2023, 10:12 a.m. UTC
From: Marc-André Lureau <marcandre.lureau@redhat.com>

There is no guarantee to have a current GL context here. The current
code seems to rely on the renderer using a GL backend, and to set a
current GL context. But this is not always the case, for example if the
renderer backend is DirectX.

This change is enough to fix using virgl with sdl2 on win32, on my setup.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 ui/sdl2.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Daniel P. Berrangé March 13, 2023, 10:18 a.m. UTC | #1
On Mon, Mar 13, 2023 at 02:12:00PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> There is no guarantee to have a current GL context here. The current
> code seems to rely on the renderer using a GL backend, and to set a
> current GL context. But this is not always the case, for example if the
> renderer backend is DirectX.
> 
> This change is enough to fix using virgl with sdl2 on win32, on my setup.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  ui/sdl2.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


With regards,
Daniel
diff mbox series

Patch

diff --git a/ui/sdl2.c b/ui/sdl2.c
index 8cb77416af..137f7ab57f 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -101,7 +101,7 @@  void sdl2_window_create(struct sdl2_console *scon)
                                          flags);
     scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0);
     if (scon->opengl) {
-        scon->winctx = SDL_GL_GetCurrentContext();
+        scon->winctx = SDL_GL_CreateContext(scon->real_window);
     }
     sdl_update_caption(scon);
 }
@@ -112,6 +112,8 @@  void sdl2_window_destroy(struct sdl2_console *scon)
         return;
     }
 
+    SDL_GL_DeleteContext(scon->winctx);
+    scon->winctx = NULL;
     SDL_DestroyRenderer(scon->real_renderer);
     scon->real_renderer = NULL;
     SDL_DestroyWindow(scon->real_window);