pbrt_r3/core/sampler/
global_sampler.rs

1use super::base_sampler::BaseSampler;
2use super::sampler::Sampler;
3use crate::core::base::*;
4
5#[derive(Debug, PartialEq, Default, Clone)]
6pub struct BaseGlobalSampler {
7    pub base: BaseSampler,
8    pub dimension: u32,
9    pub interval_sample_index: i64,
10    pub array_end_dim: u32,
11}
12
13pub trait GlobalSampler: Sampler {
14    fn get_index_for_sample(&self, sample_num: i64) -> i64;
15    fn sample_dimension(&self, index: i64, dimension: u32) -> Float;
16    //
17    fn get_base(&mut self) -> &mut BaseGlobalSampler;
18}
19
20impl BaseGlobalSampler {
21    #[allow(non_upper_case_globals)]
22    pub const array_start_dim: u32 = 5;
23
24    pub fn new(samples_per_pixel: u32) -> Self {
25        BaseGlobalSampler {
26            base: BaseSampler::new(samples_per_pixel),
27            dimension: 0,
28            interval_sample_index: 0,
29            array_end_dim: Self::array_start_dim + 1,
30        }
31    }
32
33    pub fn request_1d_array(&mut self, n: u32) {
34        self.base.request_1d_array(n);
35    }
36    pub fn request_2d_array(&mut self, n: u32) {
37        self.base.request_2d_array(n);
38    }
39    pub fn get_1d_array(&mut self, n: u32) -> Option<Vec<Float>> {
40        return self.base.get_1d_array(n);
41    }
42    pub fn get_2d_array(&mut self, n: u32) -> Option<Vec<Vector2f>> {
43        return self.base.get_2d_array(n);
44    }
45}