diff options
author | Julian T <julian@jtle.dk> | 2021-07-31 18:27:56 +0200 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2021-07-31 18:27:56 +0200 |
commit | ae460c3f34838e3baf0ffafe4ccbcf1fbfe03095 (patch) | |
tree | a2ff1092f5deb2d28f5196d69ba511487f0a4953 /src/world/mod.rs | |
parent | cee9bcf4a2c8ffbfe6487f7886b2247eaba1c92c (diff) |
Remove dynamic boxes from object and list implementation
Diffstat (limited to 'src/world/mod.rs')
-rw-r--r-- | src/world/mod.rs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/world/mod.rs b/src/world/mod.rs index 3a09522..cba6ddc 100644 --- a/src/world/mod.rs +++ b/src/world/mod.rs @@ -6,21 +6,22 @@ pub mod container; mod hittable; pub use scene::*; pub use hittable::{Intersection, Hittable}; +pub use shapes::Shape; use std::sync::Arc; use crate::material::Material; use crate::core::{Bound3f, Ray}; pub struct Object { - pub shape: Box<dyn Hittable + Sync>, - pub mat: Arc<dyn Material + Sync + Send>, + pub shape: Shape, + pub mat: Arc<dyn Material>, } impl Object { - pub fn new(mat: Arc<dyn Material + Sync + Send>, shape: Box<dyn Hittable + Sync>) -> Self { + pub fn new<T: Into<Shape>>(mat: Arc<dyn Material>, shape: T) -> Self { Object { mat, - shape, + shape: shape.into(), } } } @@ -29,7 +30,7 @@ impl Hittable for Object { fn intersect(&self, ray: &Ray) -> Option<Intersection> { if let Some(mut inter) = self.shape.intersect(ray) { inter.add_material_if_none(self.mat.as_ref()); - Some(inter) + Some(inter) } else { None } |