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 {