summaryrefslogtreecommitdiff
path: root/src/macos.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/macos.zig')
-rw-r--r--src/macos.zig23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/macos.zig b/src/macos.zig
index 4d8f2883..0bad86ee 100644
--- a/src/macos.zig
+++ b/src/macos.zig
@@ -850,16 +850,18 @@ export fn pardes_should_quit() bool {
return st.core.quit;
}
-fn encodeSceneEffects(effects: animation.SceneEffect) u32 {
+// The Metal shell keeps its own CRT, ripple and glitch kernel: the bundled
+// passes of the GUI's post chain, as flags.
+fn encodeSceneEffects(post: *const pardes.config.Runtime.Post) u32 {
var flags: u32 = 0;
- if (effects.crt) flags |= scene_flag_crt;
- if (effects.ripple) flags |= scene_flag_ripple;
- if (effects.glitch) flags |= scene_flag_glitch;
+ if (post.has(.crt)) flags |= scene_flag_crt;
+ if (post.has(.ripple)) flags |= scene_flag_ripple;
+ if (post.has(.glitch)) flags |= scene_flag_glitch;
return flags;
}
fn currentSceneFlags(st: *const State) u32 {
- return encodeSceneEffects(st.core.settings.scene_effects);
+ return encodeSceneEffects(&st.core.settings.post);
}
fn advanceSceneClock(st: *State, elapsed_ns: u64) void {
@@ -2912,10 +2914,13 @@ test "pardes.h matches the Zig boundary" {
test "scene effect flags and display clock are compact and independent" {
const expectEqual = std.testing.expectEqual;
- try expectEqual(@as(u32, 0), encodeSceneEffects(.{}));
- try expectEqual(scene_flag_crt, encodeSceneEffects(.{ .crt = true }));
- try expectEqual(scene_flag_ripple, encodeSceneEffects(.{ .ripple = true }));
- try expectEqual(scene_flag_glitch, encodeSceneEffects(.{ .glitch = true }));
+ var post: pardes.config.Runtime.Post = .{};
+ try expectEqual(@as(u32, 0), encodeSceneEffects(&post));
+ _ = post.set(.crt, "", true);
+ try expectEqual(scene_flag_crt, encodeSceneEffects(&post));
+ _ = post.set(.ripple, "", true);
+ _ = post.set(.glitch, "", true);
+ try expectEqual(scene_flag_crt | scene_flag_ripple | scene_flag_glitch, encodeSceneEffects(&post));
try expectEqual(
scene_flag_crt | scene_flag_ripple | scene_flag_glitch,
encodeSceneEffects(.{ .crt = true, .ripple = true, .glitch = true }),