mirror of https://github.com/xqemu/xqemu.git
ui/gtk: make GtkGlArea usage a runtime option
Compile in both gtk-egl and gtk-gl-area, then allow to choose at runtime instead of compile time which opengl variant we want use. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20180306090951.22932-2-kraxel@redhat.com
This commit is contained in:
parent
2ca5c43091
commit
11c82b584a
|
@ -90,6 +90,8 @@ typedef struct VirtualConsole {
|
||||||
};
|
};
|
||||||
} VirtualConsole;
|
} VirtualConsole;
|
||||||
|
|
||||||
|
extern bool gtk_use_gl_area;
|
||||||
|
|
||||||
/* ui/gtk.c */
|
/* ui/gtk.c */
|
||||||
void gd_update_windowsize(VirtualConsole *vc);
|
void gd_update_windowsize(VirtualConsole *vc);
|
||||||
|
|
||||||
|
|
|
@ -52,11 +52,10 @@ common-obj-y += egl-context.o
|
||||||
common-obj-$(CONFIG_OPENGL_DMABUF) += egl-headless.o
|
common-obj-$(CONFIG_OPENGL_DMABUF) += egl-headless.o
|
||||||
ifeq ($(CONFIG_GTK_GL),y)
|
ifeq ($(CONFIG_GTK_GL),y)
|
||||||
gtk.mo-objs += gtk-gl-area.o
|
gtk.mo-objs += gtk-gl-area.o
|
||||||
else
|
endif
|
||||||
gtk.mo-objs += gtk-egl.o
|
gtk.mo-objs += gtk-egl.o
|
||||||
gtk.mo-libs += $(OPENGL_LIBS)
|
gtk.mo-libs += $(OPENGL_LIBS)
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
shader.o-libs += $(OPENGL_LIBS)
|
shader.o-libs += $(OPENGL_LIBS)
|
||||||
console-gl.o-libs += $(OPENGL_LIBS)
|
console-gl.o-libs += $(OPENGL_LIBS)
|
||||||
|
|
23
ui/gtk.c
23
ui/gtk.c
|
@ -243,6 +243,8 @@ typedef struct VCChardev {
|
||||||
#define TYPE_CHARDEV_VC "chardev-vc"
|
#define TYPE_CHARDEV_VC "chardev-vc"
|
||||||
#define VC_CHARDEV(obj) OBJECT_CHECK(VCChardev, (obj), TYPE_CHARDEV_VC)
|
#define VC_CHARDEV(obj) OBJECT_CHECK(VCChardev, (obj), TYPE_CHARDEV_VC)
|
||||||
|
|
||||||
|
bool gtk_use_gl_area;
|
||||||
|
|
||||||
static void gd_grab_pointer(VirtualConsole *vc, const char *reason);
|
static void gd_grab_pointer(VirtualConsole *vc, const char *reason);
|
||||||
static void gd_ungrab_pointer(GtkDisplayState *s);
|
static void gd_ungrab_pointer(GtkDisplayState *s);
|
||||||
static void gd_grab_keyboard(VirtualConsole *vc, const char *reason);
|
static void gd_grab_keyboard(VirtualConsole *vc, const char *reason);
|
||||||
|
@ -453,7 +455,7 @@ static void gd_update_full_redraw(VirtualConsole *vc)
|
||||||
int ww, wh;
|
int ww, wh;
|
||||||
gdk_drawable_get_size(gtk_widget_get_window(area), &ww, &wh);
|
gdk_drawable_get_size(gtk_widget_get_window(area), &ww, &wh);
|
||||||
#if defined(CONFIG_GTK_GL)
|
#if defined(CONFIG_GTK_GL)
|
||||||
if (vc->gfx.gls) {
|
if (vc->gfx.gls && gtk_use_gl_area) {
|
||||||
gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area));
|
gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -725,7 +727,7 @@ static const DisplayChangeListenerOps dcl_gl_area_ops = {
|
||||||
.dpy_gl_update = gd_gl_area_scanout_flush,
|
.dpy_gl_update = gd_gl_area_scanout_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#endif /* CONFIG_GTK_GL */
|
||||||
|
|
||||||
static const DisplayChangeListenerOps dcl_egl_ops = {
|
static const DisplayChangeListenerOps dcl_egl_ops = {
|
||||||
.dpy_name = "gtk-egl",
|
.dpy_name = "gtk-egl",
|
||||||
|
@ -745,7 +747,6 @@ static const DisplayChangeListenerOps dcl_egl_ops = {
|
||||||
.dpy_gl_update = gd_egl_scanout_flush,
|
.dpy_gl_update = gd_egl_scanout_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_GTK_GL */
|
|
||||||
#endif /* CONFIG_OPENGL */
|
#endif /* CONFIG_OPENGL */
|
||||||
|
|
||||||
/** QEMU Events **/
|
/** QEMU Events **/
|
||||||
|
@ -844,13 +845,13 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
|
||||||
|
|
||||||
#if defined(CONFIG_OPENGL)
|
#if defined(CONFIG_OPENGL)
|
||||||
if (vc->gfx.gls) {
|
if (vc->gfx.gls) {
|
||||||
#if defined(CONFIG_GTK_GL)
|
if (gtk_use_gl_area) {
|
||||||
/* invoke render callback please */
|
/* invoke render callback please */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#else
|
} else {
|
||||||
gd_egl_draw(vc);
|
gd_egl_draw(vc);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1993,7 +1994,7 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
|
||||||
g_signal_connect(vc->gfx.drawing_area, "draw",
|
g_signal_connect(vc->gfx.drawing_area, "draw",
|
||||||
G_CALLBACK(gd_draw_event), vc);
|
G_CALLBACK(gd_draw_event), vc);
|
||||||
#if defined(CONFIG_GTK_GL)
|
#if defined(CONFIG_GTK_GL)
|
||||||
if (display_opengl) {
|
if (gtk_use_gl_area) {
|
||||||
/* wire up GtkGlArea events */
|
/* wire up GtkGlArea events */
|
||||||
g_signal_connect(vc->gfx.drawing_area, "render",
|
g_signal_connect(vc->gfx.drawing_area, "render",
|
||||||
G_CALLBACK(gd_render_event), vc);
|
G_CALLBACK(gd_render_event), vc);
|
||||||
|
@ -2116,9 +2117,12 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
|
||||||
#if defined(CONFIG_OPENGL)
|
#if defined(CONFIG_OPENGL)
|
||||||
if (display_opengl) {
|
if (display_opengl) {
|
||||||
#if defined(CONFIG_GTK_GL)
|
#if defined(CONFIG_GTK_GL)
|
||||||
|
if (gtk_use_gl_area) {
|
||||||
vc->gfx.drawing_area = gtk_gl_area_new();
|
vc->gfx.drawing_area = gtk_gl_area_new();
|
||||||
vc->gfx.dcl.ops = &dcl_gl_area_ops;
|
vc->gfx.dcl.ops = &dcl_gl_area_ops;
|
||||||
#else
|
} else
|
||||||
|
#endif /* CONFIG_GTK_GL */
|
||||||
|
{
|
||||||
vc->gfx.drawing_area = gtk_drawing_area_new();
|
vc->gfx.drawing_area = gtk_drawing_area_new();
|
||||||
/*
|
/*
|
||||||
* gtk_widget_set_double_buffered() was deprecated in 3.14.
|
* gtk_widget_set_double_buffered() was deprecated in 3.14.
|
||||||
|
@ -2135,7 +2139,7 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
vc->gfx.dcl.ops = &dcl_egl_ops;
|
vc->gfx.dcl.ops = &dcl_egl_ops;
|
||||||
#endif /* CONFIG_GTK_GL */
|
}
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -2437,6 +2441,7 @@ static void early_gtk_display_init(DisplayOptions *opts)
|
||||||
if (opts->has_gl && opts->gl) {
|
if (opts->has_gl && opts->gl) {
|
||||||
#if defined(CONFIG_OPENGL)
|
#if defined(CONFIG_OPENGL)
|
||||||
#if defined(CONFIG_GTK_GL)
|
#if defined(CONFIG_GTK_GL)
|
||||||
|
gtk_use_gl_area = true;
|
||||||
gtk_gl_area_init();
|
gtk_gl_area_init();
|
||||||
#else
|
#else
|
||||||
gtk_egl_init();
|
gtk_egl_init();
|
||||||
|
|
Loading…
Reference in New Issue