8fn render_gradient(r: vec3<f32>, g: Gradient) -> vec3<f32> { 9 let r_norm = normalize(r); 12 let p_sky = max(y, 0f); 13 let p_horizon = 1f-abs(y); 14 let p_ground = max(-y, 0f); 16 let color = (g.sky * p_sky) + (g.horizon * p_horizon) + (g.ground * p_ground); 22var<uniform> gradient: Gradient; 25var image: texture_storage_2d_array<rgba16float, write>; 27@compute @workgroup_size(8, 8, 1) 28fn main(@builtin(global_invocation_id) invocation_id: vec3<u32>, @builtin(num_workgroups) num_workgroups: vec3<u32>) { 29 let size = textureDimensions(image).x; 30 let scale = f32(size)/2f; 32 let dir = vec2<f32>((f32(invocation_id.x)/scale) - 1f, (f32(invocation_id.y)/scale) - 1f); 36 switch invocation_id.z { 38 ray = vec3<f32>(1f, -dir.y, -dir.x); 41 ray = vec3<f32>(-1f, -dir.y, dir.x); 44 ray = vec3<f32>(dir.x, 1f, dir.y); 47 ray = vec3<f32>(dir.x, -1f, -dir.y); 50 ray = vec3<f32>(dir.x, -dir.y, 1f); 53 ray = vec3<f32>(-dir.x, -dir.y, -1f); 57 let render = render_gradient( 64 vec2<i32>(invocation_id.xy), 66 vec4<f32>(render, 1.0)