+26
-2
src/gui.rs
+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...");