diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2015-01-20 12:43:28 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2015-05-29 11:43:29 +0200 |
commit | 97edf3bd5eab8952d475de66ede77307c12b8c48 (patch) | |
tree | da07e1c0c8b138ae4b48c457b61d40474aeb7fa2 /include/ui | |
parent | 7ced9e9f6da2257224591b91727cfeee4f3977fb (diff) | |
download | qemu-97edf3bd5eab8952d475de66ede77307c12b8c48.zip qemu-97edf3bd5eab8952d475de66ede77307c12b8c48.tar.gz qemu-97edf3bd5eab8952d475de66ede77307c12b8c48.tar.bz2 |
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/ui')
-rw-r--r-- | include/ui/console.h | 2 | ||||
-rw-r--r-- | include/ui/gtk.h | 23 |
2 files changed, 24 insertions, 1 deletions
diff --git a/include/ui/console.h b/include/ui/console.h index 383dec2..6f7550e 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 b750845..ee6dffd 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 */ |