pbrt_r3/core/sampler/
proxy_sampler.rs1use super::sampler::Sampler;
2use crate::core::base::*;
3use crate::core::camera::*;
4
5use std::sync::Arc;
6use std::sync::RwLock;
7
8#[derive(Clone)]
9pub struct ProxySampler {
10 pub sampler: Arc<RwLock<dyn Sampler>>,
11}
12
13impl ProxySampler {
14 pub fn new(s: &Arc<RwLock<dyn Sampler>>) -> Self {
15 ProxySampler {
16 sampler: Arc::clone(s),
17 }
18 }
19}
20
21impl Sampler for ProxySampler {
22 fn start_pixel(&mut self, p: &Point2i) {
23 let mut s = self.sampler.as_ref().write().unwrap();
24 s.start_pixel(p);
25 }
26 fn get_1d(&mut self) -> Float {
27 let mut s = self.sampler.as_ref().write().unwrap();
28 return s.get_1d();
29 }
30 fn get_2d(&mut self) -> Point2f {
31 let mut s = self.sampler.as_ref().write().unwrap();
32 return s.get_2d();
33 }
34 fn request_1d_array(&mut self, n: u32) {
35 let mut s = self.sampler.as_ref().write().unwrap();
36 s.request_1d_array(n);
37 }
38 fn request_2d_array(&mut self, n: u32) {
39 let mut s = self.sampler.as_ref().write().unwrap();
40 s.request_2d_array(n);
41 }
42 fn get_1d_array(&mut self, n: u32) -> Option<Vec<Float>> {
43 let mut s = self.sampler.as_ref().write().unwrap();
44 return s.get_1d_array(n);
45 }
46 fn get_2d_array(&mut self, n: u32) -> Option<Vec<Vector2f>> {
47 let mut s = self.sampler.as_ref().write().unwrap();
48 return s.get_2d_array(n);
49 }
50 fn round_count(&self, n: u32) -> u32 {
51 let s = self.sampler.as_ref().read().unwrap();
52 return s.round_count(n);
53 }
54 fn get_camera_sample(&mut self, p: &Point2i) -> CameraSample {
55 let mut s = self.sampler.as_ref().write().unwrap();
56 return s.get_camera_sample(p);
57 }
58 fn start_next_sample(&mut self) -> bool {
59 let mut s = self.sampler.as_ref().write().unwrap();
60 return s.start_next_sample();
61 }
62 fn clone_with_seed(&self, seed: u32) -> Arc<RwLock<dyn Sampler>> {
63 return Arc::new(RwLock::new(ProxySampler {
64 sampler: self.sampler.as_ref().read().unwrap().clone_with_seed(seed),
65 }));
66 }
67 fn set_sample_number(&mut self, sample_num: u32) -> bool {
68 let mut s = self.sampler.as_ref().write().unwrap();
69 return s.set_sample_number(sample_num);
70 }
71 fn get_samples_per_pixel(&self) -> u32 {
72 let s = self.sampler.as_ref().read().unwrap();
73 return s.get_samples_per_pixel();
74 }
75}
76
77unsafe impl Sync for ProxySampler {}
78unsafe impl Send for ProxySampler {}