Fps counter

This commit is contained in:
2025-11-29 13:15:51 +01:00
parent 31418696f9
commit 834f2fac0d
3 changed files with 72 additions and 22 deletions
+61 -21
View File
@@ -1,34 +1,74 @@
pub mod components; pub mod components;
use std::sync::{Arc, Mutex};
use osmium::{renderer::Point, terminal}; use osmium::{renderer::Point, terminal};
fn main() { fn main() {
let engine = osmium::init(); let engine = osmium::init();
engine.entity(|r| { let last_frame = Arc::new(Mutex::new(std::time::Instant::now()));
r.draw_vertex( let peak: Arc<Mutex<u32>> = Arc::new(Mutex::new(0));
0, let low: Arc<Mutex<u32>> = Arc::new(Mutex::new(1000));
0,
&[
Point { x: 0, y: 0 },
Point { x: 30, y: 0 },
Point { x: 15, y: 8 },
],
0x0000ff,
);
r.draw_vertex_outline( engine.entity(move |r| {
0, let current_frame = std::time::Instant::now();
0, let since = current_frame
&[ .duration_since(last_frame.lock().unwrap().clone())
Point { x: 0, y: 0 }, .as_millis();
Point { x: 30, y: 0 },
Point { x: 15, y: 8 }, if since > 0 {
], let fps: u32 = 1000 / since as u32;
0xff0000,
); r.draw_text(
0,
0,
format!("{fps}\n{}\n{}", peak.lock().unwrap(), low.lock().unwrap()),
);
{
let mut peak = peak.lock().unwrap();
let mut low = low.lock().unwrap();
if fps > *peak {
*peak = fps;
}
if fps < *low {
*low = fps;
}
}
}
*last_frame.lock().unwrap() = current_frame;
}); });
engine
.entity(|r| {
r.draw_vertex(
0,
0,
&[
Point { x: 0, y: 0 },
Point { x: 30, y: 0 },
Point { x: 15, y: 8 },
],
0x0000ff,
);
r.draw_vertex_outline(
0,
0,
&[
Point { x: 0, y: 0 },
Point { x: 30, y: 0 },
Point { x: 15, y: 8 },
],
0xff0000,
);
})
.set_position(20, 0);
terminal::hide_cursor().unwrap(); terminal::hide_cursor().unwrap();
engine.start(); engine.start();
+1 -1
View File
@@ -99,7 +99,7 @@ impl Engine {
loop { loop {
self.render(); self.render();
sleep(160); sleep(16);
} }
} }
} }
+10
View File
@@ -19,6 +19,16 @@ impl Renderer {
} }
} }
pub fn draw_text<T: std::fmt::Display>(&mut self, x: u16, y: u16, text: T) {
write_liner(
&mut self.buf,
self.pos.x + x,
self.pos.y + y,
"",
&text.to_string(),
);
}
pub fn draw_rect(&mut self, x: u16, y: u16, width: u16, height: u16, color: u32) { pub fn draw_rect(&mut self, x: u16, y: u16, width: u16, height: u16, color: u32) {
let rl = " ".repeat(width as usize) + "\x1b[0m"; let rl = " ".repeat(width as usize) + "\x1b[0m";
let rect = (rl + "\n").repeat(height as usize); let rect = (rl + "\n").repeat(height as usize);