diff --git a/fpt-egui/src/main.rs b/fpt-egui/src/main.rs index fe2e45c..9efba2c 100644 --- a/fpt-egui/src/main.rs +++ b/fpt-egui/src/main.rs @@ -162,7 +162,6 @@ impl FPT { if self.cycles_since_last_frame == self.gb.borrow().cycles_in_one_frame() { let gb = self.gb.borrow(); frame = Some(*gb.get_frame()); // Copies the whole [u8; WIDTH * HEIGHT] into frame - self.gb_frame_count += 1; self.cycles_since_last_frame = 0; } @@ -178,11 +177,9 @@ impl FPT { self.gb_frame_count += 1; self.cycles_since_last_frame = 0; self.total_cycles += 70224; - self.gb.borrow_mut().frame(); - - let gb = self.gb.borrow(); - let frame = gb.get_frame(); - + // Run for a whole frame and decode the resulting picture into our GUI's image + let mut gb = self.gb.borrow_mut(); + let frame = gb.advance_frame(); for (i, &gb_pixel) in frame.iter().enumerate() { self.image.pixels[i] = PALETTE[gb_pixel as usize]; } diff --git a/fpt/src/lib.rs b/fpt/src/lib.rs index 8d05165..852ce51 100644 --- a/fpt/src/lib.rs +++ b/fpt/src/lib.rs @@ -59,7 +59,7 @@ impl Gameboy { cycles } - pub fn frame(&mut self) -> &Frame { + pub fn advance_frame(&mut self) -> &Frame { for _ in 0..DOTS_IN_ONE_FRAME { // TODO: care for double speed mode (need to run two cpu t_cycles) self.cpu.t_cycle();