diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2021-11-05 11:42:06 -0400 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2021-11-05 11:42:06 -0400 |
| commit | c39deb218178d1fb814dd2138ceff4b541a03d85 (patch) | |
| tree | 843478391dfc3bae3991d5bd83c7a1bc1aeff004 /ui/gtk.c | |
| parent | e4d96a7eb83146c936d88182c8dee9ba899bb6bb (diff) | |
| parent | 1350ff156b25be65c599ecca9957ce6726c6d383 (diff) | |
| download | focaccia-qemu-c39deb218178d1fb814dd2138ceff4b541a03d85.tar.gz focaccia-qemu-c39deb218178d1fb814dd2138ceff4b541a03d85.zip | |
Merge remote-tracking branch 'remotes/kraxel/tags/egl-20211105-pull-request' into staging
gtk: a collection of egl fixes. # gpg: Signature made Fri 05 Nov 2021 07:30:21 AM EDT # gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] * remotes/kraxel/tags/egl-20211105-pull-request: ui/gtk-egl: blitting partial guest fb to the proper scanout surface ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl ui/gtk-egl: make sure the right context is set as the current ui/gtk-egl: un-tab and re-tab should destroy egl surface and context virtio-gpu: splitting one extended mode guest fb into n-scanouts Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'ui/gtk.c')
| -rw-r--r-- | ui/gtk.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ui/gtk.c b/ui/gtk.c index b0564d80c1..d2892ea6b4 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -778,6 +778,9 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque) if (!vc->gfx.ds) { return FALSE; } + if (!vc->gfx.surface) { + return FALSE; + } vc->gfx.dcl.update_interval = gd_monitor_update_interval(vc->window ? vc->window : s->window); @@ -1242,6 +1245,16 @@ static gboolean gd_tab_window_close(GtkWidget *widget, GdkEvent *event, vc->tab_item, vc->label); gtk_widget_destroy(vc->window); vc->window = NULL; +#if defined(CONFIG_OPENGL) + if (vc->gfx.esurface) { + eglDestroySurface(qemu_egl_display, vc->gfx.esurface); + vc->gfx.esurface = NULL; + } + if (vc->gfx.ectx) { + eglDestroyContext(qemu_egl_display, vc->gfx.ectx); + vc->gfx.ectx = NULL; + } +#endif return TRUE; } @@ -1271,6 +1284,16 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque) if (!vc->window) { gtk_widget_set_sensitive(vc->menu_item, false); vc->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); +#if defined(CONFIG_OPENGL) + if (vc->gfx.esurface) { + eglDestroySurface(qemu_egl_display, vc->gfx.esurface); + vc->gfx.esurface = NULL; + } + if (vc->gfx.esurface) { + eglDestroyContext(qemu_egl_display, vc->gfx.ectx); + vc->gfx.ectx = NULL; + } +#endif gd_widget_reparent(s->notebook, vc->window, vc->tab_item); g_signal_connect(vc->window, "delete-event", |