[cairo] Cairo to Wayland
tarnyko at tarnyko.net
Sun Jun 25 19:00:50 UTC 2017
Cairo supports Wayland directly, mast notably via its EGL backend, by using
the Wayland "wl_egl_window" abstraction.
Creation order is like this : wl_egl_window -> EGLSurface -> cairo_surface_t
Here is simplified C sample code :
/* - Wayland - */
struct wl_surface *wlsurface;
struct wl_egl_window *wlwindow;
/* - Cairo - */
wlsurface = wl_compositor_create_surface (wlcompositor);
wlwindow = wl_egl_window_create (wlsurface, 320, 240);
/* create egl display context (edpy, ecfg, ectx) here ... */
esrf = eglCreateWindowSurface (edpy, ecfg, wlwindow, NULL);
device = cairo_egl_device_create (edpy, ectx);
surface = cairo_gl_surface_create_for_egl (device, esrf, 320, 240);
cr = cairo_create (surface);
cairo_rectangle (cr, 0, 0, 320, 240);
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_set_source_rgba (cr, 0, 0, 0, 1);
I hope it helps.
Mike Gran writes:
> Hi all,
> This might be more of a Wayland question than a Cairo question, but...
> If I wanted to use Cairo to draw a raw Wayland client window,
> what is the most efficient pathway? For a CPU solution,
> I could have Cairo draw to an in-memory RGB array and then
> send the damaged part of that array to Wayland.
> But if there to directly interoperate between Wayland and
> Cairo? Can I have both of them looking at the same EGL surface
> or the same location in RAM or VRAM?
> Mike Gran
> cairo mailing list
> cairo at cairographics.org
More information about the cairo