void gd_egl_refresh(DisplayChangeListener *dcl) { VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl); if (!vc->gfx.esurface) { gd_egl_init(vc); if (!vc->gfx.esurface) { return; } vc->gfx.gls = qemu_gl_init_shader(); if (vc->gfx.ds) { surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds); } } graphic_hw_update(dcl->con); if (vc->gfx.glupdates) { vc->gfx.glupdates = 0; gtk_egl_set_scanout_mode(vc, false); gd_egl_draw(vc); } }
static void egl_headless_init(DisplayState *ds, DisplayOptions *opts) { QemuConsole *con; egl_dpy *edpy; int idx; if (egl_rendernode_init(NULL) < 0) { error_report("egl: render node init failed"); exit(1); } for (idx = 0;; idx++) { con = qemu_console_lookup_by_index(idx); if (!con || !qemu_console_is_graphic(con)) { break; } edpy = g_new0(egl_dpy, 1); edpy->dcl.con = con; edpy->dcl.ops = &egl_ops; edpy->gls = qemu_gl_init_shader(); register_displaychangelistener(&edpy->dcl); } }