Wayland

Current support work is being done to enable client-side applications and a wayland compositor. Currently EFL applications that use the lower-level Ecore-Evas and higher level Elementary API's will work and display correctly in a Wayland compositor, handle input, resizing and moving. Client-side frames are already provided. Both Shared-memory buffers AND EGL/OpenGL-ES2 buffers are supported. The Shared-memory buffers are purely CPU-rendered, meaning that they will work with or without OpenGL hardware acceleration support. They are fast and usable. The OpenGL-ES2 display is fully accelerated with all primitives being rendered by OpenGL (Hardware acceleration) and already work fully due to a long history of supporting this under X11 and other embedded EGL/OpenGL-ES2 environments.

Work is currently underway to land a complete Wayland compositor (stand-alone, no X11 needed) into the master branch of Enlightenment. At this stage, we are undergoing heavy testing and resolving any issues. We will definitely need to extend Wayland protocol to make a fully functioning desktop or mobile environment, but what we do have (based on the existing wayland protocol) is quite usable.

All the source code for Wayland support is already in our source code repositories. You will need to check them out. Please see our Contribute page for information there.

EFL is currently tracking Wayland master and will not function with the 0.85 release.


Current Status

[Evas Engines]

  • Shared Memory Engine
    • Feature complete including support for double or triple buffering, transparency, and rotation
    • Supports client-side frame decorations
  • EGL Engine
    • Feature complete including support for double or triple buffering, transparency, rotation, partial swaps, and buffer ageing
    • Supports client-side frame decorations
  • DRM Engine
    • Feature complete including support for double or triple buffering, transparency, and rotation
    • Supports software rendering
    • Hardware Accelerated rendering has landed upstream (perhaps prematurely) and requires more testing. It is only compatible with gbm-based drivers at the moment.
    • Supports client-side frame decorations

[Ecore_Evas]

  • Shared Memory Engine
    • Supports client-side frame decorations
    • Supports Transparency and Rotation
    • Supports Wayland Shell & Xdg Shell Maximize and Fullscreen
    • Provides internally drawn client-side frame decorations if none are supplied
  • EGL Engine
    • Supports client-side frame decorations
    • Supports Transparency and Rotation
    • Supports Wayland Shell & Xdg Shell Maximize and Fullscreen
    • Provides internally drawn client-side frame decorations if none are supplied
  • DRM Engine
    • Supports client-side frame decorations
    • Supports Transparency and Rotation
    • Supports Wayland Shell & Xdg Shell Maximize and Fullscreen
    • Provides internally drawn client-side frame decorations if none are supplied

[Elementary]

  • Can utilize Shared Memory, EGL Engine or DRM Engine
  • Complete support for all widgets provided by the toolkit
  • Supports Wayland Cursors
  • Supports Wayland Copy-N-Paste
  • Supports Wayland Drag-N-Drop

Building Wayland Support

The following instructions assume that you have Wayland/Weston installed as per http://wayland.freedesktop.org/building.html

These steps assume that you have the environment variables set as per the above building instructions.

[Compiling EFL]

To compile EFL with Wayland support, you should compile EFL as you normally would, and enable the desired below options:

  • -Dwl=true
    • To enable building the Evas Wayland Shared-Memory Engine
  • -Ddrm=true
    • To enable drm/kms display support (in the console/framebuffer)

[Compiling Enlightenment]

To compile Enlightenment with Wayland Client support, you should compile Enlightenment as you normally would, and enable the desired below options:

  • -Dwl=true
    • To enable build support for the Enlightenment Compositor to render Wayland Clients

Running

For Elementary apps (almost all EFL apps) just set the ELM_DISPLAY=wl environment variable.

For Enlightenment simply log into any VT/TTY console and run enlightenment_start.

XDG_RUNTIME_DIR environment variable to be set. If it is not set by your distribution, please consult documentation for your distribution on the proper way to set it. If none is set, then the Enlightenment X11 Compositor will use /tmp by default.