[Spice-devel] [spice-gtk PATCH] spice-widget: init egl only after first gl_scanout
Frediano Ziglio
fziglio at redhat.com
Fri Jul 22 15:05:32 UTC 2016
>
> When using GtkDrawingArea and EGL was not used, it was still initialized.
> This produced warning messages on systems where EGL is not supported.
>
> Move spice_egl_init from drawing_area_realize to gl_scanout.
> Drawing_area_realize is no longer needed.
> ---
> Not needed for GtkGLArea, because it only supports egl.
> ---
> src/spice-widget.c | 41 ++++++++++++++++++-----------------------
> 1 file changed, 18 insertions(+), 23 deletions(-)
>
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index c7dd553..aa61de8 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -563,28 +563,6 @@ gl_area_realize(GtkGLArea *area, gpointer user_data)
> #endif
> #endif
>
> -static void
> -drawing_area_realize(GtkWidget *area, gpointer user_data)
> -{
> -#ifdef GDK_WINDOWING_X11
> - SpiceDisplay *display = SPICE_DISPLAY(user_data);
> - GError *err = NULL;
> -
> - if (!GDK_IS_X11_DISPLAY(gdk_display_get_default()))
> - return;
> -
> - if (!spice_egl_init(display, &err)) {
> - g_critical("egl init failed: %s", err->message);
> - g_clear_error(&err);
> - }
> -
> - if (!spice_egl_realize_display(display, gtk_widget_get_window(area),
> &err)) {
> - g_critical("egl realize failed: %s", err->message);
> - g_clear_error(&err);
> - }
> -#endif
> -}
> -
> static void spice_display_init(SpiceDisplay *display)
> {
> GtkWidget *widget = GTK_WIDGET(display);
> @@ -599,7 +577,6 @@ static void spice_display_init(SpiceDisplay *display)
>
> g_object_connect(area,
> "signal::draw", draw_event, display,
> - "signal::realize", drawing_area_realize, display,
> NULL);
> gtk_stack_add_named(d->stack, area, "draw-area");
> gtk_widget_set_double_buffered(area, true);
> @@ -2633,6 +2610,7 @@ G_GNUC_INTERNAL
> void spice_display_widget_gl_scanout(SpiceDisplay *display)
> {
> SpiceDisplayPrivate *d = display->priv;
> + GError *err = NULL;
>
> SPICE_DEBUG("%s: got scanout", __FUNCTION__);
> set_egl_enabled(display, true);
> @@ -2649,6 +2627,23 @@ void spice_display_widget_gl_scanout(SpiceDisplay
> *display)
> g_critical("update scanout failed: %s", err->message);
> g_clear_error(&err);
> }
> + } else {
> + if (!spice_egl_init(display, &err)) {
> + g_critical("egl init failed: %s", err->message);
> + g_clear_error(&err);
> + }
> +
> +#ifdef GDK_WINDOWING_X11
> + if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
> + GtkWidget *area = gtk_stack_get_child_by_name(d->stack,
> "draw-area");
> + if (!spice_egl_realize_display(display,
> gtk_widget_get_window(area), &err)) {
> + g_critical("egl realize failed: %s", err->message);
> + g_clear_error(&err);
> + }
> + }
> +#endif
> +
> + spice_display_widget_gl_scanout (display);
Why instead of calling it recursively you just move the check
before?
something like
if (!d->egl.context_ready) {
initialize context ...
}
if (d->egl.context_ready) {
use context (as current code) ...
}
perhaps would be even better to call spice_egl_init before
set_egl_enabled
> }
> }
>
Frediano
More information about the Spice-devel
mailing list