diff --git a/src/bin/viewer.rs b/src/bin/viewer.rs index 63297e3..2daa4a5 100644 --- a/src/bin/viewer.rs +++ b/src/bin/viewer.rs @@ -1,4 +1,5 @@ use coremem::StaticSim; +use coremem::render::{ColorTermRenderer, Renderer as _}; use std::fs::{File, read_dir}; use std::io::BufReader; @@ -46,9 +47,24 @@ impl Loader { } } +#[derive(Default)] +struct Viewer { + viewing: Option, + z: u32, + renderer: ColorTermRenderer, +} + +impl Viewer { + fn switch_frame(&mut self, frame: Frame) { + self.viewing = Some(frame); + self.renderer.render_z_slice(self.viewing.as_ref().map(|f| &f.data).unwrap(), self.z, &[]); + } +} + fn main() { let opt = Opt::from_args(); let loader = Loader::new(opt.directory); + let mut viewer = Viewer::default(); let frame = loader.load_next(None); - println!("hello, world! {:?}", frame.map(|f| f.path)); + viewer.switch_frame(frame.unwrap()); } diff --git a/src/render.rs b/src/render.rs index 18e171e..f95d496 100644 --- a/src/render.rs +++ b/src/render.rs @@ -236,8 +236,11 @@ impl ImageRenderExt for RgbImage { } pub trait Renderer: Send + Sync { + fn render_z_slice(&self, state: &dyn GenericSim, z: u32, measurements: &[Box]) { + self.render_with_image(state, &RenderSteps::render(state, measurements, z)); + } fn render(&self, state: &dyn GenericSim, measurements: &[Box]) { - self.render_with_image(state, &RenderSteps::render(state, measurements, state.depth() / 2)); + self.render_z_slice(state, state.depth() / 2, measurements); } /// Not intended to be called directly by users; implement this if you want the image to be /// computed using default settings and you just manage where to display/save it. @@ -266,6 +269,7 @@ pub trait Renderer: Send + Sync { // } // } +#[derive(Default)] pub struct ColorTermRenderer; impl Renderer for ColorTermRenderer {