| This is the QtWayland module. |
| |
| The QtWayland module consists of two parts: |
| |
| Wayland platform plugin: |
| Enables Qt applications to be run as Wayland clients. |
| |
| QtWaylandCompositor API: |
| Enables the creation of Wayland compositors using Qt and QtQuick. |
| |
| To build the QtWayland module you need the external dependencies: |
| xkbcommon - http://xkbcommon.org/ |
| wayland - http://wayland.freedesktop.org/ |
| |
| QtWaylandCompositor supports loading client buffer integrations that don't use |
| the wayland-egl interfaces. These client buffer integrations are picked up by |
| QtWaylandCompositor as plugins. To specify what plugin to load use the environment |
| variable QT_WAYLAND_CLIENT_BUFFER_INTEGRATION in the environment where the |
| compositor is started. The compositor will broadcast to the clients which |
| hardware integration to load when using the generic platformplugin "wayland". If |
| no client buffer integration is specified, then the wayland-egl plugin will be |
| loaded. Please note that no Weston clients will work if the non standard |
| wayland-egl client buffer integration is used. |
| |
| To start the qwindow-compositor with the xcomposite-glx integration then start |
| the compositor as follows: |
| QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-glx ./qwindow-compositor |
| |
| Now it should be possible to start an application in a separate terminal. ie: |
| $QTBASEDIR/examples/opengl/hellowindow/hellowindow -platform wayland --single |
| |
| Available client buffer integrations are: |
| wayland-egl (this is the default) |
| brcm |
| xcomposite-egl |
| xcomposite-glx |
| |
| Testing a Qt-based compositor on X11: |
| |
| Most QWidget-based applications will use shared memory buffers, which work on |
| all hardware. OpenGL and Qt Quick applications need a way to send graphics |
| memory buffers from client to server. There are many options, and not all |
| options work on all hardware. |
| |
| The X Composite buffer integration should work on all modern X servers. It |
| can be used with either EGL or GLX as the OpenGL backend. This must match the |
| backend used by the xcb platform plugin. (Normally GLX is the default for Qt |
| applications running on X11.) To use the X Composite buffer sharing with EGL, |
| start the compositor as follows: |
| |
| QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl ./pure-qml |
| |
| Using wayland-egl requires support from the driver. Intel integrated graphics |
| are supported through the standard Mesa drivers. For NVidia, driver version |
| 364.12 or newer is required, and Qt must be configured with "-opengl es2". |
| Run the compositor as follows: |
| |
| QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl ./minimal-qml |
| |
| Please note that some NVidia drivers may require early EGL initialization. Qt |
| clients normally use the buffer integration communicated by the compositor. |
| To set the client-side buffer integration manually, run clients with |
| "-platform wayland-egl". |
| |
| Shell Integration: |
| |
| Some platforms, especially non-desktop ones, use a custom Wayland shell |
| extension. These are tailored to the specific embedded form factor better than |
| the generic wl_shell or xdg_shell extensions that target desktop systems. |
| Custom shell protocols are added through shell integration plugins. |
| |
| Which shell integration to use is determined by the QT_WAYLAND_SHELL_INTEGRATION |
| environment variable. If no shell is specified, the default is to try shells in |
| the following order: xdg-shell, xdg-shell-v6, wl-shell and then ivi-shell. |
| |
| Example Usage: |
| |
| Starting the hellowindow example application (one of the examples for qtbase) |
| with ivi-shell integration: |
| |
| QT_WAYLAND_SHELL_INTEGRATION=ivi-shell ./hellowindow -platform wayland |
| |
| Available Shell Integrations: |
| |
| * ivi-shell |
| * wl-shell (deprecated) |
| * xdg-shell |
| * xdg-shell-v5 (deprecated) |
| * xdg-shell-v6 |
| |
| We hang out at #qt-labs and #qt-lighthouse on freenode if you have any questions |
| |