ndless_sdl/gfx/
framerate.rs1pub mod ll {
2 #[repr(C)]
5 #[derive(Debug, Copy, Clone, Default)]
6 pub struct FPSmanager {
7 pub framecount: u32,
8 pub rateticks: f32,
9 pub lastticks: u32,
10 pub rate: u32,
11 }
12
13 extern "C" {
14 pub fn SDL_initFramerate(manager: *mut FPSmanager);
15 pub fn SDL_setFramerate(manager: *mut FPSmanager, rate: u32) -> cty::c_int;
16 pub fn SDL_getFramerate(manager: *mut FPSmanager) -> cty::c_int;
17 pub fn SDL_getFramecount(manager: *mut FPSmanager) -> cty::c_int;
18 pub fn SDL_framerateDelay(manager: *mut FPSmanager);
19 }
20}
21
22#[derive(Debug)]
32pub struct FPS {
33 manager: ll::FPSmanager,
34}
35
36impl Default for FPS {
37 fn default() -> Self {
38 let mut manager: ll::FPSmanager = Default::default();
39 unsafe { ll::SDL_initFramerate(&mut manager) };
40 Self { manager }
41 }
42}
43
44impl FPS {
45 pub fn new() -> Self {
46 Default::default()
47 }
48 pub fn delay(&mut self) {
49 unsafe { ll::SDL_framerateDelay(&mut self.manager) }
50 }
51 pub fn framerate(&mut self, rate: u32) {
52 unsafe {
53 ll::SDL_setFramerate(&mut self.manager, rate);
54 }
55 }
56 pub fn get_framerate(&self) -> u32 {
57 self.manager.rate
58 }
59 pub fn frame_count(&self) -> u32 {
60 self.manager.framecount
61 }
62}