From 97edf3bd5eab8952d475de66ede77307c12b8c48 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 20 Jan 2015 12:43:28 +0100 Subject: gtk: add opengl support, using egl This adds opengl rendering support to the gtk ui, using egl. It's off by default for now, use 'qemu -display gtk,gl=on' to play with this. Note that gtk got native opengl support with release 3.16. There most likely will be a separate implementation for 3.16+, using the native gtk opengl support. This patch covers older versions (and for the time being 3.16 too, hopefully without rendering quirks). Signed-off-by: Gerd Hoffmann --- include/ui/console.h | 2 +- include/ui/gtk.h | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/ui/console.h b/include/ui/console.h index 383dec24ff..6f7550ef9c 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -393,7 +393,7 @@ void curses_display_init(DisplayState *ds, int full_screen); int index_from_key(const char *key); /* gtk.c */ -void early_gtk_display_init(void); +void early_gtk_display_init(int opengl); void gtk_display_init(DisplayState *ds, bool full_screen, bool grab_on_hover); #endif diff --git a/include/ui/gtk.h b/include/ui/gtk.h index b750845ab5..ee6dffd306 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -22,6 +22,10 @@ #include #endif +#if defined(CONFIG_OPENGL) +#include "ui/egl-helpers.h" +#endif + /* Compatibility define to let us build on both Gtk2 and Gtk3 */ #if GTK_CHECK_VERSION(3, 0, 0) static inline void gdk_drawable_get_size(GdkWindow *w, gint *ww, gint *wh) @@ -41,6 +45,12 @@ typedef struct VirtualGfxConsole { cairo_surface_t *surface; double scale_x; double scale_y; +#if defined(CONFIG_OPENGL) + ConsoleGLState *gls; + EGLContext ectx; + EGLSurface esurface; + int glupdates; +#endif } VirtualGfxConsole; #if defined(CONFIG_VTE) @@ -73,4 +83,17 @@ typedef struct VirtualConsole { }; } VirtualConsole; +/* ui/gtk.c */ +void gd_update_windowsize(VirtualConsole *vc); + +/* ui/gtk-egl.c */ +void gd_egl_init(VirtualConsole *vc); +void gd_egl_draw(VirtualConsole *vc); +void gd_egl_update(DisplayChangeListener *dcl, + int x, int y, int w, int h); +void gd_egl_refresh(DisplayChangeListener *dcl); +void gd_egl_switch(DisplayChangeListener *dcl, + DisplaySurface *surface); +void gtk_egl_init(void); + #endif /* UI_GTK_H */ -- cgit v1.2.3-55-g7522