summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorGerd Hoffmann2015-01-20 12:43:28 +0100
committerGerd Hoffmann2015-05-29 11:43:29 +0200
commit97edf3bd5eab8952d475de66ede77307c12b8c48 (patch)
treeda07e1c0c8b138ae4b48c457b61d40474aeb7fa2 /include
parentui: add egl-helpers (diff)
downloadqemu-97edf3bd5eab8952d475de66ede77307c12b8c48.tar.gz
qemu-97edf3bd5eab8952d475de66ede77307c12b8c48.tar.xz
qemu-97edf3bd5eab8952d475de66ede77307c12b8c48.zip
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 <kraxel@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/ui/console.h2
-rw-r--r--include/ui/gtk.h23
2 files changed, 24 insertions, 1 deletions
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 <X11/XKBlib.h>
#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 */