aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md11
-rw-r--r--desktop/modules/appearance/README.md38
2 files changed, 33 insertions, 16 deletions
diff --git a/AGENTS.md b/AGENTS.md
index f7f62a8..30bba4f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -13,8 +13,8 @@ modules.
desktop/ the drawer (SUPER alone): user details, sound, mail, VMs, status,
performance, clipboard, updates; and the settings
- window for pages set once: wallpaper, theme, theme status, icons,
- sunset, idle (the former appearance shell), notifications, autostart, shells,
+ window for pages set once: wallpaper, transitions, theme, theme status,
+ icons, sunset, idle (the former appearance shell), notifications, autostart, shells,
the assistant's daemon and presets, qtmaildir, git,
Hyprland's keyboard shortcuts, options and monitors, fonts
island/ top-centre pills on DP-1: clock, volume, tray, layout, privacy,
@@ -81,6 +81,13 @@ returns 144. Always `-x`, never `-f`.
For anything visual, ask. Screenshots of a transient OSD are a race, and the
user has the screen.
+**A shader can be checked headless, but not with `QT_QPA_PLATFORM=offscreen`.**
+That is the software backend, where a `ShaderEffect` draws nothing, so the new
+picture shows through and an "is the end frame the new picture" check passes
+for every shader while proving nothing. Run Qt's `qml` tool under `Xvfb` with
+`QT_QPA_PLATFORM=xcb LIBGL_ALWAYS_SOFTWARE=1`, which gives llvmpipe, and compare
+`grabToImage` frames; `QSG_INFO=1` prints the backend.
+
## Per-component notes
Each directory's README carries its own, and they are worth reading before
diff --git a/desktop/modules/appearance/README.md b/desktop/modules/appearance/README.md
index 59868b4..ab61811 100644
--- a/desktop/modules/appearance/README.md
+++ b/desktop/modules/appearance/README.md
@@ -156,20 +156,30 @@ which screen is targeted. Their proportions come from the pane **width**, not
its height. Scaling the stand off height gave the wide monitor a 20px stand
that was invisible and would have given the vertical one an absurd long neck.
-### The burn
-
-Apply, and every engine change, burns the old picture away over the new
-one (`WallpaperSpread.qml`, `burn.frag`). swaybg has no transitions, and
-wallp kills one and starts another, so a surface on the bottom layer of each
-screen, above swaybg and below every window, holds the old picture over the
-swap. `Wallpapers.run()` emits `swapping`, then waits for each cover to call
-`covered()` (both its pictures decoded, then 50ms for a few frames) before
-it starts wallp, with a 1.5s fallback for a cover that never comes. Started
-any earlier, the new picture showed through for a moment before the burn.
-The images stay hidden until both are decoded for the same reason: the new
-one usually lands first. A set from a terminal gets no burn. After editing
-`burn.frag`, recompile with `qsb --qt6 -o burn.frag.qsb burn.frag` under a
-new name or restart the shell: a running shell keeps a shader by URL.
+### Transitions
+
+Apply, and every engine change, plays a transition over the swap, the old
+picture giving way to the new one (`WallpaperSpread.qml`, `WallShader.qml`,
+one `.frag` each: burn, ink, shatter, ripple, melt, blinds, crosswarp). The
+Transitions page picks one, or Random, which draws from the ticked ones and
+never repeats the last. Clicking a tile plays it between the two current
+wallpapers through the same shader. Both screens play the same one in a run.
+Each shader must draw the old picture exactly at `progress` 0 and the new one
+at 1, or the cover pops as it comes and goes. Pictures reach a shader through
+a layer, since an `Image` sampled directly gives the whole picture and not its
+crop.
+
+swaybg has no transitions, and wallp kills one and starts another, so a
+surface on the bottom layer of each screen, above swaybg and below every
+window, holds the old picture over the swap. `Wallpapers.run()` emits
+`swapping`, then waits for each cover to call `covered()` (both its pictures
+decoded, then 50ms for a few frames) before it starts wallp, with a 1.5s
+fallback for a cover that never comes. Started any earlier, the new picture
+showed through for a moment before the transition. The images stay hidden
+until both are decoded for the same reason: the new one usually lands first.
+A set from a terminal gets no transition. After editing a `.frag`, recompile
+with `qsb --qt6 -o <name>.frag.qsb <name>.frag` under a new name or restart
+the shell: a running shell keeps a shader by URL.
## Wallpaper engine