On 19.05.2015 16:29, Gerd Hoffmann
wrote:
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>
---
include/ui/console.h | 2 +-
include/ui/gtk.h | 23 +++++++++
ui/Makefile.objs | 3 ++
ui/gtk-egl.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++
ui/gtk.c | 77 ++++++++++++++++++++++------
vl.c | 11 +++-
6 files changed, 240 insertions(+), 17 deletions(-)
create mode 100644 ui/gtk-egl.c
I can't give any R-b, because that would require really digging into
Gtk... The code is pretty similar to the SDL code, though (not by
chance I guess), so it looks fine to me. If it would compile, that
is, see below.
(It does work with Gtk 2, though)
((at least on my laptop with mesa; on my desktop with fglrx,
creating the shader fails, which may or may not have to do something
with "libEGL warning: DRI2: failed to authenticate" (which is
probably in turn my own fault for using a proprietary driver)))
Konsole output
[snip]
diff --git a/ui/gtk.c b/ui/gtk.c
index c58028f..bf66014 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
[snip]
@@ -1713,7 +1737,16 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook),
vc->tab_item, gtk_label_new(vc->label));
- vc->gfx.dcl.ops = &dcl_ops;
+#if defined(CONFIG_OPENGL)
+ if (display_opengl) {
+ gtk_widget_set_double_buffered(vc->gfx.drawing_area, FALSE);
gcc said:
>
Konsole output
qemu/ui/gtk.c:1742:9: Fehler: »gtk_widget_set_double_buffered« is
deprecated (declared at /usr/include/gtk-3.0/gtk/gtkwidget.h:896)
[-Werror=deprecated-declarations]
(yes, the mix of German and English is gcc's doing)
But then again it didn't compile before, either:
qemu/ui/gtk.c:1927:5: Fehler: »gdk_cursor_new« is deprecated
(declared at /usr/include/gtk-3.0/gdk/gdkcursor.h:223)
[-Werror=deprecated-declarations]
But that function was deprecated in 3.16,
gtk_widget_set_double_buffered() was deprecated in 3.14 already (as
far as I can see from the header file alone).
Max