summaryrefslogtreecommitdiff
path: root/workspaces/main/shaders/circle_mask_compute.wgsl
blob: 87012f60c885d7180c14962771aca46677dea5a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Circle mask compute shader
// Generates a circular mask (1.0 inside, 0.0 outside)

#include "common_uniforms"
#include "render/fullscreen_vs"

struct CircleMaskParams {
  radius: f32,
  _pad0: f32,
  _pad1: f32,
  _pad2: f32,
};

@group(0) @binding(0) var<uniform> uniforms: CommonUniforms;
@group(0) @binding(1) var<uniform> params: CircleMaskParams;

@fragment fn fs_main(@builtin(position) p: vec4f) -> @location(0) vec4f {
  let uv = p.xy / uniforms.resolution;
  let center = vec2f(0.5, 0.5);
  let aspect_corrected_uv = (uv - center) * vec2f(uniforms.aspect_ratio, 1.0);
  let dist = length(aspect_corrected_uv);

  let edge_width = 0.01;
  let mask = smoothstep(params.radius + edge_width, params.radius - edge_width, dist);

  return vec4<f32>(mask, mask, mask, 1.0);
}