pbrt_r3/core/sampler/
global_sampler.rs1use 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 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}