Make intermediate image saving a flag, print progress.

This commit is contained in:
Bill Thiede 2018-10-06 07:52:07 -07:00
parent bf633756f6
commit d40cb0418f
2 changed files with 26 additions and 8 deletions

View File

@ -32,7 +32,7 @@ fn main() -> Result<(), std::io::Error> {
.start(pprof_path.to_str().unwrap().as_bytes())
.unwrap();
}
let res = render(scene, &opt.output);
let res = render(scene, &opt.output, opt.store_intermediate);
if let Some(pprof_path) = opt.pprof {
info!("Saving pprof to {}", pprof_path.to_string_lossy());
PROFILER.lock().unwrap().stop().unwrap();

View File

@ -1,5 +1,7 @@
use std;
use std::fmt;
use std::io;
use std::io::Write;
use std::path::Path;
use std::path::PathBuf;
use std::str;
@ -97,6 +99,9 @@ pub struct Opt {
/// Use acceleration data structure, may be BVH or kd-tree depending on scene.
#[structopt(long = "use_accel")]
pub use_accel: bool,
/// Store intermediate images when -s > 1
#[structopt(long = "store_intermediate")]
pub store_intermediate: bool,
/// Output directory
#[structopt(parse(from_os_str), default_value = "/tmp/tracer")]
@ -165,10 +170,14 @@ fn render_worker(
}
output_chan.send((subsample, pixel_data));
}
info!("Shutting down worker {}", tid);
trace!(target: "renderer", "Shutting down worker {}", tid);
}
pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::io::Error> {
pub fn render(
scene: Scene,
output_dir: &Path,
store_intermediate: bool,
) -> std::result::Result<(), std::io::Error> {
let (seq_tx, seq_rx) = channel::unbounded();
let (pixel_data_tx, pixel_data_rx) = channel::unbounded();
@ -193,8 +202,9 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i
acc.push(Default::default());
}
println!("Rendering with {} subsamples", scene.subsamples);
let mut img = RgbImage::new(scene.width as u32, scene.height as u32);
for (_subsample, pixel_data) in pixel_data_rx {
for (subsample, pixel_data) in pixel_data_rx {
acc_count += 1;
pixel_data.iter().enumerate().for_each(|(idx, p)| {
let x = idx % scene.width;
@ -216,10 +226,18 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i
]),
);
});
let path = output_dir.join(format!("iteration{:05}.png", acc_count));
trace!(target: "renderer", "Saving {}", path.to_string_lossy());
img.save(&path)
.unwrap_or_else(|_| panic!("Failed save {}", path.to_string_lossy()));
if subsample % 10 == 0 {
print!("{}", subsample);
} else {
print!(".");
}
io::stdout().flush().unwrap();
if store_intermediate {
let path = output_dir.join(format!("iteration{:05}.png", acc_count));
trace!(target: "renderer", "Saving {}", path.to_string_lossy());
img.save(&path)
.unwrap_or_else(|_| panic!("Failed save {}", path.to_string_lossy()));
}
}
let path = output_dir.join("final.png");
// Write the contents of this image to the Writer in PNG format.