use crate::Arena; use crate::core::sampler::CreateSampler; use crate::utils::{FileLoc, ParameterDictionary}; use shared::core::geometry::Point2i; use shared::core::options::get_options; use shared::core::sampler::StratifiedSampler; use std::fmt::Error; impl CreateSampler for StratifiedSampler { fn create( params: &ParameterDictionary, _full_res: Point2i, _loc: &FileLoc, arena: &mut Arena, ) -> Result { let options = get_options(); let jitter = params.get_one_bool("jitter", true); let (x_samples, y_samples) = if options.quick_render { (1, 1) } else if let Some(n) = options.pixel_samples { let div = (n as f64).sqrt() as i32; let y = (1..=div).rev().find(|d| n % d == 0).unwrap(); (n / y, y) } else { ( params.get_one_int("xsamples", 4), params.get_one_int("ysamples", 4), ) }; let seed = params.get_one_int("seed", options.seed); let sampler = Self::new( x_samples as u32, y_samples as u32, Some(seed as u64), jitter, ); arena.aloc(sampler); Ok(sampler) } }