WebGPU Voxel Game

FPS counter & gui tweaks

j0.lol fc0fcb7a af6d1e75

Changed files
+26 -2
src
+26 -2
src/gui.rs
··· 9 9 world::World, 10 10 }; 11 11 12 + const FPS_AVG_WINDOW: usize = 120; 12 13 pub struct EguiRenderer { 13 14 state: egui_winit::State, 14 15 renderer: egui_wgpu::Renderer, 15 16 frame_started: bool, 16 17 pub scale_factor: f32, 17 18 pub chunk_influence: (i32, i32, i32), 19 + pub frame_count: u64, 20 + pub fps_average: [f64; FPS_AVG_WINDOW], 18 21 } 19 22 20 23 impl EguiRenderer { ··· 60 63 frame_started: false, 61 64 scale_factor: 1.0, 62 65 chunk_influence: (0, 0, 0), 66 + frame_count: 0, 67 + fps_average: [0.; FPS_AVG_WINDOW] 63 68 } 64 69 } 65 70 ··· 140 145 } 141 146 142 147 pub fn update(&mut self, gfx: &mut Gfx, world: &mut World, dt: instant::Duration) { 143 - let ctx = self.ctx(); 144 148 145 149 let mut scale_factor = self.scale_factor; 146 150 let (mut chunk_x, mut chunk_y, mut chunk_z) = self.chunk_influence; 147 151 152 + 153 + let dt = dt.as_secs_f32(); 154 + self.frame_count += 1; 155 + self.fps_average[(self.frame_count % FPS_AVG_WINDOW as u64) as usize] = 1.0_f64 / dt as f64; 156 + let mean = self.fps_average.iter().sum::<f64>() / FPS_AVG_WINDOW as f64; 157 + 158 + 159 + let ctx = self.ctx(); 148 160 egui::Window::new("Debug Menu") 149 161 .resizable(true) 150 162 .vscroll(true) 151 163 .default_open(false) 152 164 .show(ctx, |ui| { 165 + ui.heading("Performance debugging stats..."); 166 + ui.label(format!("FPS: {:.1} (smoothed over an interval of {})", mean, FPS_AVG_WINDOW)); 167 + ui.label(format!("FPS: {:.1} (jittery)", 1.0 / dt)); 168 + ui.label(format!("Instances: {:?}", gfx.object.instances.len())); 169 + ui.label(format!("Vertices (guess): {:?}", gfx.object.instances.len() as u32 * gfx.object.model.meshes.iter().map(|x| x.num_elements).sum::<u32>())); 170 + 171 + 172 + ui.separator(); 173 + 174 + ui.heading("Debugging toys..."); 153 175 ui.horizontal(|ui| { 154 - ui.label(format!("FPS: {}", 1.0 / dt.as_secs_f32())); 176 + 155 177 ui.label("Draw Color"); 156 178 157 179 // Absolutely disgusting code! ··· 223 245 }); 224 246 225 247 ui.separator(); 248 + 249 + ui.heading("World toys..."); 226 250 227 251 ui.horizontal(|ui| { 228 252 ui.label("Scramble chunk at...");