Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
Implement dynamic relative fade scaling and add gaussian fade mode with gamma correction in quad_round shader
scenefx/render/fx_renderer/shaders/quad_round.frag | 8 +++++++-
src/server/output.rs | 11 +++++++++--
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/scenefx/render/fx_renderer/shaders/quad_round.frag b/scenefx/render/fx_renderer/shaders/quad_round.frag
index e1091bf..8a2a0e4 100644
--- a/scenefx/render/fx_renderer/shaders/quad_round.frag
+++ b/scenefx/render/fx_renderer/shaders/quad_round.frag
@@ -83,9 +83,15 @@ void main() {
} else if (fade_mode == 3) {
factor_x = 0.5 - 0.5 * cos(factor_x * 3.14159265);
factor_y = 0.5 - 0.5 * cos(factor_y * 3.14159265);
+ } else if (fade_mode == 4) {
+ float x = 1.0 - factor_x;
+ factor_x = clamp((exp(-3.0 * x * x) - 0.049) / 0.951, 0.0, 1.0);
+ float y = 1.0 - factor_y;
+ factor_y = clamp((exp(-3.0 * y * y) - 0.049) / 0.951, 0.0, 1.0);
}
- final_color *= factor_x * factor_y;
+ float combined_factor = factor_x * factor_y;
+ final_color *= pow(combined_factor, 2.2);
}
gl_FragColor = final_color * quad_corner_alpha * clip_corner_alpha;
diff --git a/src/server/output.rs b/src/server/output.rs
index d850522..dc135f1 100644
--- a/src/server/output.rs
+++ b/src/server/output.rs
@@ -709,10 +709,17 @@ impl Output {
"smoothstep" => 1,
"quadratic" => 2,
"cosine" => 3,
+ "gaussian" => 4,
_ => 0, // "linear"
};
- let inset_scaled = if cell_fade_inset > 0 {
- ((cell_fade_inset as f64 * zoom * 100.0).round() as i32) * 10 + fade_mode
+
+ // Cap the active fade inset at 45% of the cell size to prevent cells from completely blurring out at high zoom out levels
+ let max_inset = (rw as f64 * 0.45).floor() as i32;
+ let inset_pixels = (cell_fade_inset as f64 * zoom).round() as i32;
+ let active_inset = inset_pixels.min(max_inset).max(0);
+
+ let inset_scaled = if active_inset > 0 {
+ (active_inset * 1000) + fade_mode
} else {
0
};