#[macro_use] extern crate log; extern crate cpuprofiler; extern crate rand; extern crate rtiow; extern crate stderrlog; extern crate structopt; use std::fs; use std::time::Instant; use cpuprofiler::PROFILER; use structopt::StructOpt; use rtiow::renderer::render; use rtiow::renderer::Model; use rtiow::renderer::Opt; use rtiow::scenes; fn main() -> Result<(), std::io::Error> { stderrlog::new() .verbosity(3) .timestamp(stderrlog::Timestamp::Millisecond) .init() .unwrap(); let start = Instant::now(); let opt = Opt::from_args(); let scene = match opt.model { Model::Book => scenes::book::new(false, &opt), Model::Bench => scenes::bench::new(&opt), Model::BookBVH => scenes::book::new(true, &opt), Model::Cube => scenes::cube::new(&opt), Model::Tutorial => scenes::tutorial::new(&opt), Model::BVH => scenes::bvh::new(&opt), }; fs::create_dir_all(&opt.output)?; let pprof_path = "pprof.profile"; if opt.pprof { PROFILER.lock().unwrap().start(pprof_path).unwrap(); } let res = render(scene, &opt.output); if opt.pprof { info!("Saving pprof to {}", pprof_path); PROFILER.lock().unwrap().stop().unwrap(); } let runtime = start.elapsed(); info!( "Render time {}.{} seconds", runtime.as_secs(), runtime.subsec_millis() ); res }