[Spice-devel] [spice-gtk PATCH v4] spice-widget: init egl only after first gl_scanout
Marc-André Lureau
mlureau at redhat.com
Thu Jul 28 13:40:27 UTC 2016
Hi
----- Original Message -----
> 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.
> ---
> Changes since v3:
> - changed drawing_area_realized variable to gtk_widget_get_realized()
> - check whether gl-scanout is defined after realizing drawing-area
> -if yes, call spice_display_widget_gl_scanout
>
> Changes since v2:
> - added drawing_area_realized variable
> - only enable egl after spice-widget is fully realized
> - moved more of the code inside GDK_WINDOWING_X11 guard
>
> Changes since v1:
> - changed from recursive call to if check
> - moved set_egl_enabled(display, true); after initialisation is finished
> ---
> src/spice-widget.c | 35 +++++++++++++++++++++++------------
> 1 file changed, 23 insertions(+), 12 deletions(-)
>
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index 9020b07..27169ff 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -568,20 +568,11 @@ 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 (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
> +
> spice_display_get_gl_scanout(SPICE_DISPLAY_CHANNEL(display->priv->display))
> != NULL)
> + spice_display_widget_gl_scanout(display);
>
> - 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
> }
>
> @@ -2662,8 +2653,28 @@ G_GNUC_INTERNAL
> void spice_display_widget_gl_scanout(SpiceDisplay *display)
> {
> SpiceDisplayPrivate *d = display->priv;
> + GError *err = NULL;
>
To avoid unused variables, you should move it...
> SPICE_DEBUG("%s: got scanout", __FUNCTION__);
> +
> +#ifdef GDK_WINDOWING_X11
> + GtkWidget *area = gtk_stack_get_child_by_name(d->stack, "draw-area");
> +
> + if (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
> + !d->egl.context_ready &&
> + gtk_widget_get_realized(area)) {
here
> + 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
> +
> set_egl_enabled(display, true);
>
> if (d->egl.context_ready) {
> --
other than that, looks good, ack
> 2.7.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list