summaryrefslogtreecommitdiff
path: root/rust/crates/compositor/src/shaders/mask.wgsl
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-13 04:40:29 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-13 05:01:51 +0200
commit8230faf082c405c9fd0fa640f4ce2284315782ae (patch)
treee00bf694a83b4d14d6d56942ba89ba92402d854e /rust/crates/compositor/src/shaders/mask.wgsl
parentdbd68ff1396bf498eb97f095810b78d2bddd0011 (diff)
downloadopencut-8230faf082c405c9fd0fa640f4ce2284315782ae.tar.gz
feat: wasm compositor
Made-with: Cursor
Diffstat (limited to 'rust/crates/compositor/src/shaders/mask.wgsl')
-rw-r--r--rust/crates/compositor/src/shaders/mask.wgsl25
1 files changed, 25 insertions, 0 deletions
diff --git a/rust/crates/compositor/src/shaders/mask.wgsl b/rust/crates/compositor/src/shaders/mask.wgsl
new file mode 100644
index 00000000..6bbfeccc
--- /dev/null
+++ b/rust/crates/compositor/src/shaders/mask.wgsl
@@ -0,0 +1,25 @@
+struct VertexOutput {
+ @builtin(position) position: vec4f,
+ @location(0) tex_coord: vec2f,
+}
+
+struct MaskUniforms {
+ inverted: f32,
+ _pad0: f32,
+ _pad1: f32,
+ _pad2: f32,
+}
+
+@group(0) @binding(0) var layer_texture: texture_2d<f32>;
+@group(0) @binding(1) var layer_sampler: sampler;
+@group(1) @binding(0) var mask_texture: texture_2d<f32>;
+@group(1) @binding(1) var mask_sampler: sampler;
+@group(2) @binding(0) var<uniform> uniforms: MaskUniforms;
+
+@fragment
+fn fragment_main(input: VertexOutput) -> @location(0) vec4f {
+ let layer = textureSample(layer_texture, layer_sampler, input.tex_coord);
+ let mask = textureSample(mask_texture, mask_sampler, input.tex_coord).a;
+ let alpha = select(mask, 1.0 - mask, uniforms.inverted > 0.5);
+ return vec4f(layer.rgb, layer.a * alpha);
+}