Skip to content
cococryPublic

About

high performance, independent wayland compositor

Topics

Resources

Stars

54 stars

Watchers

2 watching

Forks

Repository files navigation

vortex

vortex is an independent wayland compositor written in C.


Overview

Currently under active development as a high-performance, modern Wayland compositor focused on creating a visually appealing Wayland desktop experience.

The project's goal is to create a self-contained platform dedicated entirely to desktop compositing. In other words, the compositor is responsible only for compositing and its related aspects (such as window animations and IPC), while components like the desktop shell are intentionally abstracted away from it.

Build & Run

Make sure you have the required dependencies installed (debian packages shown):

sudo apt install meson ninja-build libwayland-dev wayland-protocols libdrm-dev libgbm-dev libegl-dev libgl-dev libwayland-egl-backend-dev libinput-dev libudev-dev libxcursor-dev xcursor-themes libxkbcommon-dev libpixman-1-dev libseat-dev libliftoff-dev libcglm-dev

For Vulkan rendering support, additionally install:

sudo apt install libvulkan-dev

Clone & build:

git clone https://github.com/cococry/vortex.git
cd vortex

# needs to be in $PATH
meson setup build --prefix="$HOME/.local"
meson compile -C build
meson install -C build

Build Options

Vortex supports configuring which sink backends and rendering backends are built through Meson options.

Option Values Default Description
-Dbackends drm, wayland, all all Specify which sink backends to build
-Drenderers opengl, vulkan, all opengl Specify which rendering backends to build

The backends option controls which sink backend .so modules are compiled and installed.

The renderers option controls which GPU rendering backends are compiled, including the corresponding backends in Runara.

For example, build only the DRM sink backend with OpenGL rendering:

meson setup build --prefix="$HOME/.local" -Dbackends=drm -Drenderers=opengl

Build only the Wayland sink backend with Vulkan rendering:

meson setup build --prefix="$HOME/.local" -Dbackends=wayland -Drenderers=vulkan

Build all sink backends and rendering backends:

meson setup build --prefix="$HOME/.local" -Dbackends=all -Drenderers=all

To change the options of an existing build:

meson configure build -Dbackends=wayland -Drenderers=opengl
meson compile -C build
meson install -C build

Important

Vulkan rendering is TODO and not yet supported

Simple test of vortex:

./build/vortex &
sleep 1
WAYLAND_DISPLAY=wayland-1 weston-simple-shm

Running

Note

Use the wayland display that is logged by the output of ./vortex --verbose as the WAYLAND_DISPLAY variable when starting clients.

Note

The sink backend is automatically chosen at runtime, depending on context.

Supported sink backends are:

  • DRM/KMS (hardware scanout)
  • Wayland (nested session)

CLI options

Usage

vortex [option:s] (value:s)

Options

Option Description
-h, --help Show this help message and exit
-v, --version Show version information
-vb, --verbose Log verbose (trace) output for debugging
-lf, --logfile Write logs to a logfile located in:
~/.local/state/vortex/logs/ or $XDG_STATE_HOME/vortex/logs
-q, --quiet Run in quiet mode (no logging)
-vo, --virtual-outputs [val] Specify the number of virtual outputs (windows) in nested mode
-b, --backend [val] Specify the compositor’s sink backend.
Valid options: drm, wl. Example:
vortex -b drm
-bp, --backend-path [val] Specify the path to a .so file to load as a custom sink backend
-expt, --exclude-protocol [val(s)] Specify the optional protocols (space seperated) you wish to not support during runtime

Sink Backend Configuration

The compositor supports pluggable sink backends that can be discovered at runtime.

Valid Backends

Valid options for backends are:

  • drm
  • wl

You can specify one directly:

vortex -b drm

Or load a custom shared object backend manually:

vortex -bp /usr/lib/vortex/backends/libcustom.so

Environment Variables

Vortex handles the following environment variables:

Env Description
VT_DRM_NO_ATOMIC Force legacy DRM/KMS implementation
VT_DRM_NO_HARDWARE_CURSOR Force cursor compositing
VT_DRM_NO_DIRECT_SCANOUT Composite every surface, never try to put client buffers on hardware planes.

About

high performance, independent wayland compositor

Topics

Resources

Stars

54 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages