How man33li/wayland-shader-kde works
WaylandShader is a native KWin desktop effect that applies RetroArch Slang presets and per-monitor color adjustments during composition. The main workflow is settings UI or CLI → asynchronous session-D-Bus control → KWin effect → preset compilation and per-output rendering → KWin presentation. The graph includes documented parameter editing, output controls, persistence, and hotplug handling. Some branches are documented in the README but not shown in sampled implementation excerpts, so their wiring is omitted where uncertain.
Main entry points: effect.cpp Desktop effect · shader_runtime.cpp Shader runtime · controller_client.cpp D-Bus client · controller_main.cpp Settings window
Components 17
Control clients
- Settings window
src/controller_main.cpp - Control CLI
src/ctl_main.cpp - D-Bus client
src/controller_client.cpp
KWin effect
- Effect plugin
src/plugin.cpp - Desktop effect
src/effect.cpp - Output profiles
src/effect.cpp - Persistent settings
src/effect.cpp - Preset loader
src/effect.cpp
Shader rendering
- Shader runtime
src/shader_runtime.cpp - Per-output composition
src/effect.cpp - Color adjustments
src/effect.cpp
Other components
- Desktop user
- Session D-Bus
- KWin compositor
- Slang preset
- librashader
- KWin render target
Connections 22
- Desktop user → Settings window: controls
- Desktop user → Control CLI: runs commands
- Settings window → D-Bus client: requests
- Control CLI → D-Bus client: requests
- D-Bus client → Session D-Bus: calls asynchronously
- Session D-Bus → Desktop effect: dispatches control
- Desktop effect → Session D-Bus: publishes status
- KWin compositor → Effect plugin: loads effect
- Effect plugin → Desktop effect: creates
- KWin compositor → Desktop effect: invokes render hooks
- Desktop effect → Output profiles: tracks outputs
- Desktop effect → Persistent settings: reads and writes
- Desktop effect → Preset loader: starts compilation
- Preset loader → Slang preset: loads
- Preset loader → Shader runtime: creates runtime
- Shader runtime → librashader: uses API
- Desktop effect → Shader runtime: renders frames
- Desktop effect → Per-output composition: captures per output
- Per-output composition → Shader runtime: shader frame
- Per-output composition → Color adjustments: applies adjustments
- Color adjustments → KWin render target: presents
- Shader runtime → KWin render target: renders shader output