wayland/x11: Set constraints on the CoglRenderer
authorNeil Roberts <neil@linux.intel.com>
Wed, 29 Feb 2012 16:35:48 +0000 (16:35 +0000)
committerNeil Roberts <neil@linux.intel.com>
Thu, 1 Mar 2012 11:41:51 +0000 (11:41 +0000)
When using the Wayland backend this sets a constraint that the
CoglRenderer selects the Wayland EGL winsys.

When a Wayland compositor display is set it now also sets a constraint
that the render should use EGL because only EGL renderers will set up
the required wl_drm global object.

The X11 backend now sets the X11 constraint.

Reviewed-by: Emmanuele Bassi <ebassi@linux.intel.com>
clutter/clutter-backend.c
clutter/wayland/clutter-backend-wayland.c
clutter/x11/clutter-backend-x11.c

index 849365b..6142af8 100644 (file)
@@ -269,6 +269,12 @@ clutter_backend_real_create_context (ClutterBackend  *backend,
   if (backend->cogl_renderer == NULL)
     goto error;
 
+  /* If the application is trying to act as a Wayland compositor then
+     it needs to have an EGL-based renderer backend */
+  if (_wayland_compositor_display)
+    cogl_renderer_add_constraint (backend->cogl_renderer,
+                                  COGL_RENDERER_CONSTRAINT_USES_EGL);
+
   CLUTTER_NOTE (BACKEND, "Connecting the renderer");
   if (!cogl_renderer_connect (backend->cogl_renderer, &internal_error))
     goto error;
index f72937e..db5613c 100644 (file)
@@ -215,6 +215,8 @@ clutter_backend_wayland_get_renderer (ClutterBackend  *backend,
 
   renderer = cogl_renderer_new ();
 
+  cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_EGL_WAYLAND);
+
   cogl_wayland_renderer_set_foreign_display (renderer,
                                              backend_wayland->wayland_display);
   cogl_wayland_renderer_set_foreign_compositor (renderer,
index acafccb..b05a5e8 100644 (file)
@@ -697,6 +697,8 @@ clutter_backend_x11_get_renderer (ClutterBackend  *backend,
 
   renderer = cogl_renderer_new ();
 
+  cogl_renderer_add_constraint (renderer, COGL_RENDERER_CONSTRAINT_USES_X11);
+
   /* set the display object we're using */
   cogl_xlib_renderer_set_foreign_display (renderer, xdisplay);