1#import bevy_ui::ui_vertex_output::UiVertexOutput 3@group(1) @binding(0) var<storage> values: array<f32>; 9 proportional_width: u32, 11@group(1) @binding(1) var<uniform> config: Config; 13const RED: vec4<f32> = vec4(1.0, 0.0, 0.0, 1.0); 14const GREEN: vec4<f32> = vec4(0.0, 1.0, 0.0, 1.0); 18fn color_from_dt(dt: f32) -> vec4<f32> { 19 return mix(GREEN, RED, dt / config.dt_max); 23fn sdf_square(pos: vec2<f32>, half_size: vec2<f32>, offset: vec2<f32>) -> f32 { 25 let dist = abs(p) - half_size; 26 let outside_dist = length(max(dist, vec2<f32>(0.0, 0.0))); 27 let inside_dist = min(max(dist.x, dist.y), 0.0); 28 return outside_dist + inside_dist; 32fn fragment(in: UiVertexOutput) -> @location(0) vec4<f32> { 33 let dt_min = config.dt_min; 34 let dt_max = config.dt_max; 35 let dt_min_log2 = config.dt_min_log2; 36 let dt_max_log2 = config.dt_max_log2; 41 let len = arrayLength(&values); 42 var graph_width = 0.0; 43 for (var i = 1u; i <= len; i += 1u) { 44 let dt = values[len - i]; 47 if config.proportional_width == 1u { 48 frame_width = (dt / dt_min) / f32(len); 53 let frame_height_factor = (log2(dt) - dt_min_log2) / (dt_max_log2 - dt_min_log2); 54 let frame_height_factor_norm = min(max(0.0, frame_height_factor), 1.0); 55 let frame_height = mix(0.0, 1.0, frame_height_factor_norm); 57 let size = vec2(frame_width, frame_height) / 2.0; 58 let offset = vec2(1.0 - graph_width - size.x, 1. - size.y); 59 if (sdf_square(in.uv, size, offset) < 0.0) { 60 return color_from_dt(dt); 63 graph_width += frame_width; 66 return vec4(0.0, 0.0, 0.0, 0.5);