Commit 47ab600668 for qemu.org
commit 47ab60066835fb324f35f13dc717c9f33f864185
Author: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Date: Wed Mar 4 16:50:28 2026 +0000
ui/gdk: Restore original context after new context creation
Get currently bound GL context when creating new GL context and restore
it after the creation for consistency with behavior expected by virglrenderer
that assumes context-creation doesn't switch context.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Message-ID: <20260303151422.977399-5-dmitry.osipenko@collabora.com>
Message-ID: <20260304165043.1437519-7-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
index c709b2ce0f..ce49000d3f 100644
--- a/ui/gtk-gl-area.c
+++ b/ui/gtk-gl-area.c
@@ -250,11 +250,13 @@ QEMUGLContext gd_gl_area_create_context(DisplayGLCtx *dgc,
QEMUGLParams *params)
{
VirtualConsole *vc = container_of(dgc, VirtualConsole, gfx.dgc);
+ GdkGLContext *ctx, *current_ctx;
GdkWindow *window;
- GdkGLContext *ctx;
GError *err = NULL;
int major, minor;
+ current_ctx = gdk_gl_context_get_current();
+
window = gtk_widget_get_window(vc->gfx.drawing_area);
ctx = gdk_window_create_gl_context(window, &err);
if (err) {
@@ -275,8 +277,12 @@ QEMUGLContext gd_gl_area_create_context(DisplayGLCtx *dgc,
gdk_gl_context_make_current(ctx);
gdk_gl_context_get_version(ctx, &major, &minor);
- gdk_gl_context_clear_current();
- gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area));
+
+ if (current_ctx) {
+ gdk_gl_context_make_current(current_ctx);
+ } else {
+ gdk_gl_context_clear_current();
+ }
if (gd_cmp_gl_context_version(major, minor, params) == -1) {
/* created ctx version < requested version */