From 047941f0208e4d25a3fdc65533494648d36508d7 Mon Sep 17 00:00:00 2001 From: Daniel Oom Date: Tue, 6 Aug 2024 22:18:12 +0200 Subject: [PATCH] Remove overly liberal uses of derive(Copy) --- geometry/src/aabb.rs | 2 +- geometry/src/aap.rs | 2 +- geometry/src/clip.rs | 12 ++++++------ geometry/src/intersection.rs | 4 ++-- geometry/src/ray.rs | 2 +- geometry/src/triangle.rs | 4 ++-- kdtree-tester/src/bin/kdtree-reducer-cli.rs | 15 ++++++++------- kdtree-tester/src/checked_intersection.rs | 6 +++--- kdtree-tester/src/ray_bouncer.rs | 2 +- kdtree/src/sah.rs | 4 ++-- scene/src/lib.rs | 4 ++-- 11 files changed, 29 insertions(+), 28 deletions(-) diff --git a/geometry/src/aabb.rs b/geometry/src/aabb.rs index 5ba58d83..d82c5c43 100644 --- a/geometry/src/aabb.rs +++ b/geometry/src/aabb.rs @@ -2,7 +2,7 @@ use glam::Vec3; use super::aap::Aap; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub struct Aabb { min: Vec3, max: Vec3, diff --git a/geometry/src/aap.rs b/geometry/src/aap.rs index 0c000a1e..3f6ca208 100644 --- a/geometry/src/aap.rs +++ b/geometry/src/aap.rs @@ -4,7 +4,7 @@ use crate::ray::Ray; use super::axis::Axis; -#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)] +#[derive(Clone, Debug, PartialEq, PartialOrd)] pub struct Aap { pub axis: Axis, pub distance: f32, diff --git a/geometry/src/clip.rs b/geometry/src/clip.rs index 06acd73c..65c51046 100644 --- a/geometry/src/clip.rs +++ b/geometry/src/clip.rs @@ -18,7 +18,7 @@ pub fn clip_triangle_aabb(v0: &Vec3, v1: &Vec3, v2: &Vec3, aabb: &Aabb) -> Array (true, Aap::new_z(aabb_max.z)), ]; - let is_inside = |clip_plane: (bool, Aap), point: Vec3| { + let is_inside = |clip_plane: &(bool, Aap), point: Vec3| { if clip_plane.0 { point[clip_plane.1.axis] <= clip_plane.1.distance } else { @@ -31,7 +31,7 @@ pub fn clip_triangle_aabb(v0: &Vec3, v1: &Vec3, v2: &Vec3, aabb: &Aabb) -> Array output.push(*v2); output.push(*v0); - for clip_plane @ (_, plane) in clip_planes { + for clip_plane in clip_planes { if output.is_empty() { return output; } @@ -40,13 +40,13 @@ pub fn clip_triangle_aabb(v0: &Vec3, v1: &Vec3, v2: &Vec3, aabb: &Aabb) -> Array let points_iter = input.iter().cycle().skip(input.len() - 1).zip(input.iter()); for (a, b) in points_iter { let ray = Ray::between(*a, *b); - let intersecting = plane.intersect_ray_point(&ray); - if is_inside(clip_plane, *b) { - if !is_inside(clip_plane, *a) { + let intersecting = clip_plane.1.intersect_ray_point(&ray); + if is_inside(&clip_plane, *b) { + if !is_inside(&clip_plane, *a) { output.push(intersecting.unwrap()); } output.push(*b); - } else if is_inside(clip_plane, *a) { + } else if is_inside(&clip_plane, *a) { output.push(intersecting.unwrap()); } } diff --git a/geometry/src/intersection.rs b/geometry/src/intersection.rs index 48cd69dd..7cddcd25 100644 --- a/geometry/src/intersection.rs +++ b/geometry/src/intersection.rs @@ -1,4 +1,4 @@ -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct PointIntersection { pub u: f32, pub v: f32, @@ -18,7 +18,7 @@ impl PointIntersection { } } -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct RayIntersection { pub t: f32, pub u: f32, diff --git a/geometry/src/ray.rs b/geometry/src/ray.rs index 285e2264..2e6ad03e 100644 --- a/geometry/src/ray.rs +++ b/geometry/src/ray.rs @@ -1,6 +1,6 @@ use glam::Vec3; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)] pub struct Ray { pub origin: Vec3, pub direction: Vec3, diff --git a/geometry/src/triangle.rs b/geometry/src/triangle.rs index eaa1dfb8..85baa3a3 100644 --- a/geometry/src/triangle.rs +++ b/geometry/src/triangle.rs @@ -5,7 +5,7 @@ use crate::{ clip::clip_triangle_aabb, intersection::RayIntersection, ray::Ray, }; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub struct Triangle { pub v0: Vec3, pub v1: Vec3, @@ -50,7 +50,7 @@ impl Triangle { } #[inline] - pub fn as_arrays(self) -> [[f32; 3]; 3] { + pub fn as_arrays(&self) -> [[f32; 3]; 3] { [self.v0.into(), self.v1.into(), self.v2.into()] } diff --git a/kdtree-tester/src/bin/kdtree-reducer-cli.rs b/kdtree-tester/src/bin/kdtree-reducer-cli.rs index 8a96f889..48aae323 100644 --- a/kdtree-tester/src/bin/kdtree-reducer-cli.rs +++ b/kdtree-tester/src/bin/kdtree-reducer-cli.rs @@ -47,15 +47,16 @@ fn try_removing( fn reduce_tree( seed: u64, - intersection: &CheckedIntersection, + intersection: CheckedIntersection, geometries: Vec, ) -> (Vec, KdNode) { - let actual_intersection = intersection.kdtree.as_ref().unwrap(); - let actual_geometry = geometries[actual_intersection.index as usize].clone(); - let actual = (actual_geometry, actual_intersection.intersection); + let actual = ( + geometries[intersection.kdtree.as_ref().unwrap().index as usize].clone(), + intersection.kdtree.as_ref().unwrap().intersection.clone(), + ); let mut geometries = geometries; - geometries.swap(0, intersection.reference.as_ref().unwrap().index as usize); - geometries.swap(1, intersection.kdtree.as_ref().unwrap().index as usize); + geometries.swap(0, intersection.reference.unwrap().index as usize); + geometries.swap(1, intersection.kdtree.unwrap().index as usize); geometries[2..].shuffle(&mut SmallRng::seed_from_u64(seed)); let mut try_index: usize = 2; let mut try_count = geometries.len() - try_index; @@ -189,7 +190,7 @@ fn main() { } eprintln!("Reducing tree..."); - let (geometries, tree) = reduce_tree(args.seed, &intersection, geometries); + let (geometries, tree) = reduce_tree(args.seed, intersection, geometries); eprintln!("Writing reduced tree to {:?}...", args.output); write_tree_json( diff --git a/kdtree-tester/src/checked_intersection.rs b/kdtree-tester/src/checked_intersection.rs index dd416fc8..d7ace7ed 100644 --- a/kdtree-tester/src/checked_intersection.rs +++ b/kdtree-tester/src/checked_intersection.rs @@ -27,11 +27,11 @@ impl CheckedIntersection { pub fn as_bytes(&self, iteration: u16) -> [u8; 50] { let mut bytes = [0u8; 50]; let ray = if let Some(kdtree) = &self.kdtree { - self.ray.extended(kdtree.intersection.t) + &self.ray.extended(kdtree.intersection.t) } else if let Some(reference) = &self.reference { - self.ray.extended(reference.intersection.t) + &self.ray.extended(reference.intersection.t) } else { - self.ray + &self.ray }; let correct_point = self .ray diff --git a/kdtree-tester/src/ray_bouncer.rs b/kdtree-tester/src/ray_bouncer.rs index ae93ccd8..9e9bde85 100644 --- a/kdtree-tester/src/ray_bouncer.rs +++ b/kdtree-tester/src/ray_bouncer.rs @@ -41,7 +41,7 @@ impl RayBouncer { .intersect(&self.scene.geometries, ray, t_range.clone()); let reference = self.reference_ray_intersect(ray, t_range); CheckedIntersection { - ray: *ray, + ray: ray.clone(), reference, kdtree, } diff --git a/kdtree/src/sah.rs b/kdtree/src/sah.rs index f7049dcf..ebef180d 100644 --- a/kdtree/src/sah.rs +++ b/kdtree/src/sah.rs @@ -98,7 +98,7 @@ pub(crate) fn find_best_split( .filter_map(|plane| { calculate_cost( cost, - split_and_partition_clipped_geometries(&clipped, cell.boundary, plane), + split_and_partition_clipped_geometries(&clipped, cell.boundary.clone(), plane), ) }) .reduce(min_by_snd) @@ -109,7 +109,7 @@ pub(crate) fn find_best_split( .filter_map(|plane| { calculate_cost( cost, - split_and_partition_clipped_geometries(&clipped, cell.boundary, plane), + split_and_partition_clipped_geometries(&clipped, cell.boundary.clone(), plane), ) }) .reduce_with(min_by_snd) diff --git a/scene/src/lib.rs b/scene/src/lib.rs index 444b7665..b672c02b 100644 --- a/scene/src/lib.rs +++ b/scene/src/lib.rs @@ -16,7 +16,7 @@ use crate::{ }, }; -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] struct TriangleNormals { n0: Vec3, n1: Vec3, @@ -29,7 +29,7 @@ impl TriangleNormals { } } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] struct TriangleTexcoords { uv0: Vec2, uv1: Vec2,