aboutsummaryrefslogtreecommitdiff
path: root/src/sample
diff options
context:
space:
mode:
Diffstat (limited to 'src/sample')
-rw-r--r--src/sample/mod.rs2
-rw-r--r--src/sample/uniform.rs6
2 files changed, 8 insertions, 0 deletions
diff --git a/src/sample/mod.rs b/src/sample/mod.rs
index 88e1aa9..1a53921 100644
--- a/src/sample/mod.rs
+++ b/src/sample/mod.rs
@@ -16,6 +16,8 @@ pub trait Sampler {
Vector2f::new_xy(self.get_sample(), self.get_sample())
}
+ fn clone_and_seed(&mut self) -> Box<dyn Sampler + Send>;
+
fn get_unit_vector(&mut self) -> Vector3f {
let s2d = self.get_sample_2d();
diff --git a/src/sample/uniform.rs b/src/sample/uniform.rs
index 2cd3156..c144f27 100644
--- a/src/sample/uniform.rs
+++ b/src/sample/uniform.rs
@@ -30,4 +30,10 @@ impl Sampler for UniformSampler {
fn get_sample(&mut self) -> Float {
self.d.sample(&mut self.r)
}
+
+ fn clone_and_seed(&mut self) -> Box<dyn Sampler + Send> {
+ let mut n = self.clone();
+ n.r = Pcg32::seed_from_u64(self.r.next_u64());
+ Box::new(n)
+ }
}