aboutsummaryrefslogtreecommitdiff
path: root/src/world/mod.rs
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2021-07-31 18:27:56 +0200
committerJulian T <julian@jtle.dk>2021-07-31 18:27:56 +0200
commitae460c3f34838e3baf0ffafe4ccbcf1fbfe03095 (patch)
treea2ff1092f5deb2d28f5196d69ba511487f0a4953 /src/world/mod.rs
parentcee9bcf4a2c8ffbfe6487f7886b2247eaba1c92c (diff)
Remove dynamic boxes from object and list implementation
Diffstat (limited to 'src/world/mod.rs')
-rw-r--r--src/world/mod.rs11
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
}