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>
This commit is contained in:
Gerd Hoffmann 2015-01-20 12:43:28 +01:00
parent 7ced9e9f6d
commit 97edf3bd5e
6 changed files with 253 additions and 17 deletions

View file

@ -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 */