struct MandelbrotFS { center: vec2; start: vec2; scale: f32; aspect: f32; iters: i32; }; [[group(1), binding(0)]] var fs: MandelbrotFS; [[stage(fragment)]] fn fragment([[location(2)]] uv: vec2) -> [[location(0)]] vec4 { var z: vec2; var i: i32; let iters = fs.iters; z = fs.start; var p: vec2; p = vec2((fs.aspect * (uv.x - 0.5)) / fs.scale + fs.center.x, (uv.y - 0.5) / fs.scale + fs.center.y); for (i = 0; i < iters; i = i + 1) { let x = (z.x * z.x - z.y * z.y) + p.x; let y = (2.0 * z.x * z.y) + p.y; if (((x * x) + (y * y)) > 4.0) { break; } z.x = x; z.y = y; } var col: f32; if (i == iters) { col = 0.0; } else { col = f32(i) / f32(iters); } return vec4(col, col, col, 1.0); }