Skip to content

Commit

Permalink
Fix web refresh rate
Browse files Browse the repository at this point in the history
  • Loading branch information
aelred committed Sep 22, 2024
1 parent 99c26eb commit cc89bdd
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions src/runtime/web.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,30 +124,39 @@ impl Runtime for Web {
let f = Rc::new(RefCell::new(None));
let g = f.clone();

let mut timestamp_last_frame_ms = 0.0;
let mut timestamp_start_ms = 0.0;
let mut num_frames: u64 = 0;

let nes = base_nes.clone();
*g.borrow_mut() = Some(closure(move |timestamp_ms: f64| {
request_animation_frame(f.borrow().as_ref().unwrap())?;

if timestamp_ms - timestamp_last_frame_ms < MS_PER_FRAME {
if timestamp_start_ms == 0.0 {
timestamp_start_ms = timestamp_ms;
}

let expected_frames = ((timestamp_ms - timestamp_start_ms) / MS_PER_FRAME) as u64;
let needed_frames = expected_frames - num_frames;
if needed_frames == 0 {
return Ok(());
}
timestamp_last_frame_ms = timestamp_ms;

let mut nes = nes.borrow_mut();
let nes = match &mut *nes {
Some(nes) => nes,
None => return Ok(()),
};

// Run NES until frame starts
while nes.display().vblank() {
nes.tick();
}
// Run NES until frame ends
while !nes.display().vblank() {
nes.tick();
for _ in 0..needed_frames {
// Run NES until frame starts
while nes.display().vblank() {
nes.tick();
}
// Run NES until frame ends
while !nes.display().vblank() {
nes.tick();
}
num_frames += 1;
}

let image_data = ImageData::new_with_u8_clamped_array_and_sh(
Expand Down

0 comments on commit cc89bdd

Please sign in to comment.