[Spice-devel] [spice-gtk PATCH v4] spice-widget: init egl only after first gl_scanout
Pavel Grunt
pgrunt at redhat.com
Thu Jul 28 18:02:36 UTC 2016
Pushed as a395ac59447dedfb922f997c7c9cff93edd53600
On Thu, 2016-07-28 at 15:51 +0200, Lukas Venhoda wrote:
> 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.
> ---
> Fixup
> - Forgot to delete GError *err = NULL;
>
> 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 | 36 +++++++++++++++++++++++-------------
> 1 file changed, 23 insertions(+), 13 deletions(-)
>
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index 9020b07..7c1c756 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,13 +2653,32 @@ G_GNUC_INTERNAL
> void spice_display_widget_gl_scanout(SpiceDisplay *display)
> {
> SpiceDisplayPrivate *d = display->priv;
> + GError *err = NULL;
>
> 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)) {
> + 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) {
> const SpiceGlScanout *scanout;
> - GError *err = NULL;
>
> scanout = spice_display_get_gl_scanout(SPICE_DISPLAY_CHANNEL(d-
> >display));
> /* should only be called when the display has a scanout */
> --
> 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