diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-13 04:40:29 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-13 05:01:51 +0200 |
| commit | 8230faf082c405c9fd0fa640f4ce2284315782ae (patch) | |
| tree | e00bf694a83b4d14d6d56942ba89ba92402d854e /rust/crates/compositor/src/shaders/mask.wgsl | |
| parent | dbd68ff1396bf498eb97f095810b78d2bddd0011 (diff) | |
| download | opencut-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.wgsl | 25 |
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); +} |
