Skip to content

Commit

Permalink
ui: associate GL context outside of display listener registration
Browse files Browse the repository at this point in the history
Consoles can have an associated GL context, without listeners (they may
be added or removed later on).

Signed-off-by: Marc-André Lureau <[email protected]>
Acked-by: Gerd Hoffmann <[email protected]>
  • Loading branch information
elmarco committed Dec 21, 2021
1 parent 4f41814 commit ac32b2f
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 2 deletions.
7 changes: 5 additions & 2 deletions ui/console.c
Original file line number Diff line number Diff line change
Expand Up @@ -1465,8 +1465,11 @@ void register_displaychangelistener(DisplayChangeListener *dcl)

assert(!dcl->ds);

if (dcl->ops->dpy_gl_ctx_create) {
qemu_console_set_display_gl_ctx(dcl->con, dcl);
if (dcl->con && dcl->con->gl &&
dcl->con->gl != dcl) {
error_report("Display %s is incompatible with the GL context",
dcl->ops->dpy_name);
exit(1);
}

if (dcl->con) {
Expand Down
1 change: 1 addition & 0 deletions ui/egl-headless.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ static void egl_headless_init(DisplayState *ds, DisplayOptions *opts)
edpy->dcl.con = con;
edpy->dcl.ops = &egl_ops;
edpy->gls = qemu_gl_init_shader();
qemu_console_set_display_gl_ctx(con, &edpy->dcl);
register_displaychangelistener(&edpy->dcl);
}
}
Expand Down
3 changes: 3 additions & 0 deletions ui/gtk.c
Original file line number Diff line number Diff line change
Expand Up @@ -2083,6 +2083,9 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
vc->gfx.kbd = qkbd_state_init(con);
vc->gfx.dcl.con = con;

if (display_opengl) {
qemu_console_set_display_gl_ctx(con, &vc->gfx.dcl);
}
register_displaychangelistener(&vc->gfx.dcl);

gd_connect_vc_gfx_signals(vc);
Expand Down
3 changes: 3 additions & 0 deletions ui/sdl2.c
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,9 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
#endif
sdl2_console[i].dcl.con = con;
sdl2_console[i].kbd = qkbd_state_init(con);
if (display_opengl) {
qemu_console_set_display_gl_ctx(con, &sdl2_console[i].dcl);
}
register_displaychangelistener(&sdl2_console[i].dcl);

#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_X11)
Expand Down
3 changes: 3 additions & 0 deletions ui/spice-display.c
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,9 @@ static void qemu_spice_display_init_one(QemuConsole *con)

qemu_spice_create_host_memslot(ssd);

if (spice_opengl) {
qemu_console_set_display_gl_ctx(con, &ssd->dcl);
}
register_displaychangelistener(&ssd->dcl);
}

Expand Down

0 comments on commit ac32b2f

Please sign in to comment.