瀏覽代碼

FPS works, still unstable

Ghastrod 1 年之前
父節點
當前提交
74ee513092
共有 1 個文件被更改,包括 22 次插入7 次删除
  1. 22 7
      src/lib.rs

+ 22 - 7
src/lib.rs

@@ -36,7 +36,11 @@ struct State<'a> {
     num_vertices: u32,
     last_frame: Instant,
     framecount: u64,
+
+
     frametime: f64,
+    old_frame_times: Vec<f64>,
+    max_history_size: usize,
     //sky_pipeline: wgpu::RenderPipeline,
 }
 
@@ -170,11 +174,13 @@ impl<'a> State<'a> {
             multiview: None
         });
 
-        let last_frame = Instant::now();
-        let delta = 0.2;
+        let last_frame: Instant = Instant::now();
+        let delta: f64 = 0.2;
 
         //let sky_pipeline = sky::sky_pipeline::new_sky_pipeline(&device, &config);
         let framecount: u64 = 0;
+        let old_frame_times : Vec<f64> = vec![];
+        let max_history: usize = 60;
 
         Self {
             surface,
@@ -194,7 +200,9 @@ impl<'a> State<'a> {
             last_frame: last_frame,
             frametime: delta,
             //sky_pipeline: sky_pipeline
-            framecount
+            framecount,
+            old_frame_times: old_frame_times,
+            max_history_size: max_history
         }
     }
 
@@ -273,11 +281,18 @@ impl<'a> State<'a> {
         self.queue.submit(iter::once(encoder.finish()));
         output.present();
 
-        self.frametime = self.last_frame.elapsed().as_micros() as f64;
+        self.frametime = (self.last_frame.elapsed().as_secs() as f64) + (self.last_frame.elapsed().as_nanos() as f64 / 1_000_000_000.0);
         self.last_frame = Instant::now();
-        self.framecount += 1;
-        println!("{:?}", self.framecount);
-        //println!("{:?}", self.frametime);
+        
+
+        self.old_frame_times.push(self.frametime);
+        if self.old_frame_times.len() > self.max_history_size {
+            self.old_frame_times.remove(0);
+        }
+        let smoothed_frame_time = self.old_frame_times.iter().sum::<f64>() / self.old_frame_times.len() as f64;
+        let smoothed_fps = 1.0 / smoothed_frame_time;
+
+        println!("{:?}", smoothed_fps);
 
         Ok(())
     }