From 394a9261b0cffe6e6a4eb5c1caa2fa1758b2ac6d Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 11:24:32 +0100 Subject: [PATCH 1/7] Fix clippy --- src/color.rs | 2 +- src/config_loader.rs | 2 +- src/geometry/aabb.rs | 4 ++-- src/geometry/extent_volume.rs | 10 ++++---- src/geometry/mesh.rs | 19 ++++++--------- src/geometry/octtree.rs | 16 ++++--------- src/geometry/simple_triangle_storage.rs | 2 +- src/geometry/sphere.rs | 4 ++-- src/geometry/triangle.rs | 6 +++-- src/light/directional.rs | 2 +- src/light/point.rs | 2 +- src/main.rs | 4 ++-- src/material.rs | 1 + src/math/matrix4.rs | 32 ++++++++++--------------- src/math/mod.rs | 2 +- src/math/three_dimensions.rs | 12 +++++----- src/math/two_dimensions.rs | 6 ++--- src/mesh_loader.rs | 6 ++--- src/renderer.rs | 4 ++-- src/texture/file.rs | 2 +- 20 files changed, 61 insertions(+), 77 deletions(-) diff --git a/src/color.rs b/src/color.rs index fa5bc61..4ea354b 100644 --- a/src/color.rs +++ b/src/color.rs @@ -68,7 +68,7 @@ impl Color { let x = chroma * (1.0 - ((hue_d % 2.0) - 1.0).abs()); let color = match hue_d { - v if v >= 0.0 && v <= 1.0 => (chroma, x, 0.0), + v if (0.0..=1.0).contains(&v) => (chroma, x, 0.0), v if v > 1.0 && v <= 2.0 => (x, chroma, 0.0), v if v > 2.0 && v <= 3.0 => (0.0, chroma, x), v if v > 3.0 && v <= 4.0 => (0.0, x, chroma), diff --git a/src/config_loader.rs b/src/config_loader.rs index f6b684d..0ce52cb 100644 --- a/src/config_loader.rs +++ b/src/config_loader.rs @@ -63,7 +63,7 @@ impl ConfigLoader { .collect(); let scene = scene::Scene::new_from_config( - &parsed_config.scenes.first().unwrap(), + parsed_config.scenes.first().unwrap(), &materials, &mut mesh_loader, Rc::clone(&self.fallback_material), diff --git a/src/geometry/aabb.rs b/src/geometry/aabb.rs index 15d4317..dce7cae 100644 --- a/src/geometry/aabb.rs +++ b/src/geometry/aabb.rs @@ -79,12 +79,12 @@ impl AABB { let b_min = bounding_box.min(); let b_max = bounding_box.max(); - return min.x <= b_max.x + min.x <= b_max.x && max.x >= b_min.x && min.y <= b_max.y && max.y >= b_min.y && min.z <= b_max.z - && max.z >= b_min.z; + && max.z >= b_min.z } } diff --git a/src/geometry/extent_volume.rs b/src/geometry/extent_volume.rs index 2e28a63..acd1e7b 100644 --- a/src/geometry/extent_volume.rs +++ b/src/geometry/extent_volume.rs @@ -8,16 +8,16 @@ use math::Vector3; // 0: https://dl.acm.org/doi/pdf/10.1145/15886.15916 const NUM_PLANE_SET_NORMALS: usize = 7; -const PLAN_SET_NORMALS: &'static [Vector3; NUM_PLANE_SET_NORMALS] = &[ +const PLAN_SET_NORMALS: &[Vector3; NUM_PLANE_SET_NORMALS] = &[ Vector3::new(1.0, 0.0, 0.0), Vector3::new(0.0, 1.0, 0.0), Vector3::new(0.0, 0.0, 1.0), // 0.577350269 = 3.0_f32.sqrt() / 3.0 but alas `sqrt` isn't a const fn // so it cannot be used in this context. - Vector3::new(0.577350269, 0.577350269, 0.577350269), - Vector3::new(-0.577350269, 0.577350269, 0.577350269), - Vector3::new(-0.577350269, -0.577350269, 0.577350269), - Vector3::new(0.577350269, -0.577350269, 0.577350269), + Vector3::new(0.577_350_26, 0.577_350_26, 0.577_350_26), + Vector3::new(-0.577_350_26, 0.577_350_26, 0.577_350_26), + Vector3::new(-0.577_350_26, -0.577_350_26, 0.577_350_26), + Vector3::new(0.577_350_26, -0.577_350_26, 0.577_350_26), ]; pub struct ExtentVolume { diff --git a/src/geometry/mesh.rs b/src/geometry/mesh.rs index 17d9dd2..a3d4dc7 100644 --- a/src/geometry/mesh.rs +++ b/src/geometry/mesh.rs @@ -133,18 +133,13 @@ impl TriangleStorage<'a>> Intersectable for Mesh = None; for triangle in self.storage.intersect(ray, cull) { - let potential_intersection = triangle.intersect(ray, cull); - - match potential_intersection { - Some(intersection) => match nearest_intersection { - Some(nearest) => { - if intersection.t < nearest.t { - nearest_intersection = Some(intersection) - } - } - None => nearest_intersection = potential_intersection, - }, - None => (), + let Some(intersection) = triangle.intersect(ray, cull) else { + continue; + }; + + let nearest = nearest_intersection.get_or_insert(intersection); + if intersection.t < nearest.t { + *nearest = intersection; } } diff --git a/src/geometry/octtree.rs b/src/geometry/octtree.rs index 9351087..643b854 100644 --- a/src/geometry/octtree.rs +++ b/src/geometry/octtree.rs @@ -42,12 +42,6 @@ struct Arena { } impl Arena { - fn new() -> Self { - Self { - nodes: Vec::default(), - } - } - fn with_capacity(capacity: usize) -> Self { Self { nodes: Vec::with_capacity(capacity), @@ -162,7 +156,7 @@ pub struct Octree { impl Octree { fn visit_nodes(&self, mut callback: F) where - F: FnMut(NodeId) -> (), + F: FnMut(NodeId), { let mut to_visit = VecDeque::new(); to_visit.push_back(self.root); @@ -248,7 +242,7 @@ impl Octree { for i in 0..8 { let triangle = &self.triangles[triangle_id.value()]; - if child_bounding_volumes[i].intersects_triangle_aabb(&triangle) { + if child_bounding_volumes[i].intersects_triangle_aabb(triangle) { to_delete.insert(*triangle_id); child_nodes[i].insert(*triangle_id); } @@ -256,7 +250,7 @@ impl Octree { } node.data = node.data.difference(&to_delete).cloned().collect(); - assert!(node.data.len() == 0); + assert!(node.data.is_empty()); (child_nodes, child_bounding_volumes) }; @@ -313,7 +307,7 @@ impl Octree { impl Transformable for Octree { fn transform(&mut self, transform: &Transform) { for triangle in self.all_mut() { - triangle.transform(&transform); + triangle.transform(transform); } self.rebuild(); @@ -322,7 +316,7 @@ impl Transformable for Octree { fn apply_transforms(&mut self, transforms: &[Transform]) { for transform in transforms { for triangle in self.all_mut() { - triangle.transform(&transform); + triangle.transform(transform); } } diff --git a/src/geometry/simple_triangle_storage.rs b/src/geometry/simple_triangle_storage.rs index 860599c..2ecc5f9 100644 --- a/src/geometry/simple_triangle_storage.rs +++ b/src/geometry/simple_triangle_storage.rs @@ -10,7 +10,7 @@ pub struct SimpleTriangleStorage { impl Transformable for SimpleTriangleStorage { fn transform(&mut self, transform: &Transform) { for triangle in self.all_mut() { - triangle.transform(&transform); + triangle.transform(transform); } } } diff --git a/src/geometry/sphere.rs b/src/geometry/sphere.rs index e2aacc8..541c3cc 100644 --- a/src/geometry/sphere.rs +++ b/src/geometry/sphere.rs @@ -125,7 +125,7 @@ mod tests { None, ); - let intersection = (&sphere as &Shape).intersect(ray, false); + let intersection = (&sphere as &dyn Shape).intersect(ray, false); assert!(intersection.is_none()); } @@ -140,7 +140,7 @@ mod tests { None, ); - let i = (&sphere as &Shape).intersect(ray, false); + let i = (&sphere as &dyn Shape).intersect(ray, false); assert!(i.is_some()); let intersection = i.unwrap(); diff --git a/src/geometry/triangle.rs b/src/geometry/triangle.rs index 651e601..6123720 100644 --- a/src/geometry/triangle.rs +++ b/src/geometry/triangle.rs @@ -110,6 +110,8 @@ impl Intersectable for Triangle { let tvec = ray.origin - self.vertices[0]; let u = tvec.dot(&pvec) * inv_det; + // This is clearer that what clippy suggests + #[allow(clippy::manual_range_contains)] if u < 0.0 || u > 1.0 { return None; } @@ -128,8 +130,8 @@ impl Intersectable for Triangle { let w = 1.0 - v - u; Some(TextureCoord::new( - w * (ta.x as f32) + u * (tb.x as f32) + v * (tc.x as f32), - w * (ta.y as f32) + u * (tb.y as f32) + v * (tc.y as f32), + w * ta.x + u * tb.x + v * tc.x, + w * ta.y + u * tb.y + v * tc.y, )) } else { None diff --git a/src/light/directional.rs b/src/light/directional.rs index 6f08cc6..94834e5 100644 --- a/src/light/directional.rs +++ b/src/light/directional.rs @@ -3,7 +3,7 @@ use std::f32; use color::Color; use intersection::Intersection; use material::Material; -use math::{Vector3, EPSILON}; +use math::{Vector3}; use ray::Ray; diff --git a/src/light/point.rs b/src/light/point.rs index b44af4c..83c2a44 100644 --- a/src/light/point.rs +++ b/src/light/point.rs @@ -1,7 +1,7 @@ use color::Color; use intersection::Intersection; use material::Material; -use math::{Point3, EPSILON}; +use math::{Point3}; use ray::Ray; use super::{Falloff, Light}; diff --git a/src/main.rs b/src/main.rs index 84060a0..9644c14 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,7 +51,7 @@ fn main() -> Result<(), Box> { let matches = match opts.parse(&args[1..]) { Ok(m) => m, - Err(f) => panic!(f.to_string()), + Err(f) => panic!("{}", f), }; if matches.opt_present("h") { @@ -109,7 +109,7 @@ fn main() -> Result<(), Box> { let timestamp = now.duration_since(SystemTime::UNIX_EPOCH)?.as_secs(); let filename = format!("images/{}.png", timestamp); image::save_buffer( - &Path::new(&filename), + Path::new(&filename), &buffer[..], camera_config.width, camera_config.height, diff --git a/src/material.rs b/src/material.rs index 597678e..4a04dd7 100644 --- a/src/material.rs +++ b/src/material.rs @@ -131,6 +131,7 @@ impl Material { } } + #[allow(clippy::too_many_arguments)] pub fn new_with_textures( ambient_color: Color, ambient_texture: OptionalTexture, diff --git a/src/math/matrix4.rs b/src/math/matrix4.rs index c235a71..7b281e3 100644 --- a/src/math/matrix4.rs +++ b/src/math/matrix4.rs @@ -263,13 +263,9 @@ mod tests { fn inverse_identity() { let m = Matrix4::identity(); - let result = m.inverse(); + let inverse = m.inverse().expect("Identity matrix should be invertible"); - if let Ok(matrix) = result { - assert_eq_matrix4!(matrix, m, EPSILON); - } else { - assert!(false, "Identity matrix should be invertible"); - } + assert_eq_matrix4!(inverse, m, EPSILON); } #[test] @@ -290,13 +286,11 @@ mod tests { assert_eq_matrix4!(m * expected, Matrix4::identity(), 1e-4); - let result = m.inverse(); + let inverse = m + .inverse() + .unwrap_or_else(|e| panic!("{:?} should be invertible: {}", m, e)); - if let Ok(inverse) = result { - assert_eq_matrix4!(inverse, expected, 1e-4); - } else { - assert!(false, "{:?} should be invertible"); - } + assert_eq_matrix4!(inverse, expected, 1e-4); } #[test] @@ -320,14 +314,12 @@ mod tests { let identity = Matrix4::identity(); for matrix in matrices.iter() { - let result = matrix.inverse(); + let inverse = matrix + .inverse() + .unwrap_or_else(|e| panic!("{:?} should be invertible: {}", matrix, e)); println!("Testing {:?}", matrix); - if let Ok(inverse) = result { - assert_eq_matrix4!((inverse * *matrix), identity, EPSILON); - } else { - assert!(false, "{:?} should be invertible", matrix); - } + assert_eq_matrix4!((inverse * *matrix), identity, EPSILON); } } @@ -337,8 +329,8 @@ mod tests { let rows = [m[0], m[1], m[2], m[3]]; - for i in 0..4 { - assert_eq_within_bound!(rows[i][i], 1.0, EPSILON); + for (i, item) in rows.iter().enumerate() { + assert_eq_within_bound!(item[i], 1.0, EPSILON); } } diff --git a/src/math/mod.rs b/src/math/mod.rs index 7a51481..7ccec93 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -57,4 +57,4 @@ pub use self::complex::Complex; pub use self::matrix4::Matrix4; pub use self::three_dimensions::{Point3, Vector3}; pub use self::transform::Transform; -pub use self::two_dimensions::{Point2, Vector2}; +pub use self::two_dimensions::{Point2}; diff --git a/src/math/three_dimensions.rs b/src/math/three_dimensions.rs index 4de41d6..a5db62b 100644 --- a/src/math/three_dimensions.rs +++ b/src/math/three_dimensions.rs @@ -1,4 +1,4 @@ -use super::{Matrix4, EPSILON}; +use super::Matrix4; use std::ops::{Add, Mul, Neg, Sub}; macro_rules! define_struct { @@ -76,11 +76,11 @@ impl Vector3 { } pub fn reflect(&self, normal: &Self) -> Self { - *self - *normal * (2.0 * self.dot(&normal)) + *self - *normal * (2.0 * self.dot(normal)) } pub fn length(&self) -> f32 { - self.dot(&self).sqrt() + self.dot(self).sqrt() } pub fn normalize(&self) -> Self { @@ -339,7 +339,7 @@ mod tests { fn test_length() { let vectors = vec![ (Vector3::new(0.0, 0.0, 0.0), 0.0), - (Vector3::new(2.3, -2.1, 2.1), 3.756327994), + (Vector3::new(2.3, -2.1, 2.1), 3.756_328), (Vector3::new(1.0, 0.0, 0.0), 1.0), (Vector3::new(0.80181, 0.26921, 0.53351), 1.0), ]; @@ -361,7 +361,7 @@ mod tests { let vec = Vector3::new(4.0, 63.0, 0.5); let result = vec.normalize(); - let expected = Vector3::new(0.063362486, 0.99795915, 0.007920311); + let expected = Vector3::new(0.063_362_49, 0.99795915, 0.007920311); assert_eq_vector3!(result, expected, EPSILON); assert_eq_within_bound!(result.length(), 1.0, EPSILON); @@ -462,7 +462,7 @@ mod tests { let v = Vector3::new(1.0, 1.0, 1.0); let m = Matrix4::scale(-2.0, 3.0, 5.0); - let expected = Vector3::new(&v.x * -2.0, &v.y * 3.0, &v.z * 5.0); + let expected = Vector3::new(v.x * -2.0, v.y * 3.0, v.z * 5.0); assert_eq_vector3!(m * v, expected, EPSILON); } diff --git a/src/math/two_dimensions.rs b/src/math/two_dimensions.rs index 9956868..c96060b 100644 --- a/src/math/two_dimensions.rs +++ b/src/math/two_dimensions.rs @@ -237,7 +237,7 @@ mod tests { fn test_vector2_length() { let v = Vector2::new(29.2, 12.0); - assert_eq_within_bound!(v.length(), 31.569605636, EPSILON); + assert_eq_within_bound!(v.length(), 31.569_605, EPSILON); } #[test] @@ -258,8 +258,8 @@ mod tests { assert_eq_vector2!( normalized, Vector2 { - x: 0.924940284, - y: 0.380112445 + x: 0.924_940_3, + y: 0.380_112_44 }, EPSILON ); diff --git a/src/mesh_loader.rs b/src/mesh_loader.rs index 897ec0d..1580347 100644 --- a/src/mesh_loader.rs +++ b/src/mesh_loader.rs @@ -84,7 +84,7 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { let obj = self.load_obj(&final_path); let (models, materials) = obj.as_ref(); let mut meshes = vec![]; - let material_cache = self.build_material_cache(&final_path, &materials)?; + let material_cache = self.build_material_cache(&final_path, materials)?; for m in models.iter() { if let Some(mesh) = self.prepare_mesh(m, &material_cache, &fallback_material) { @@ -104,7 +104,7 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { let obj = self.load_obj(&final_path); let (models, materials) = obj.as_ref(); let mut meshes = vec![]; - let material_cache = self.build_material_cache(&final_path, &materials)?; + let material_cache = self.build_material_cache(&final_path, materials)?; for m in models.iter() { let cache_key = Self::build_cache_key(&final_path.to_string_lossy(), &m.name); @@ -236,7 +236,7 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { self.obj_cache .entry(path.to_string_lossy().to_string()) .or_insert_with(|| { - let result = tobj::load_obj(&path); + let result = tobj::load_obj(path); // TODO: Better error handling if let Err(ref error) = result { println!("Load error: {}", error); diff --git a/src/renderer.rs b/src/renderer.rs index 0e1c706..8c19fd3 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -83,7 +83,7 @@ impl Renderer { } pub fn render(&self, max_depth: u32) -> Vec { - let range: Range = (0 as usize)..(self.camera.height as usize); + let range: Range = 0..(self.camera.height as usize); let width = self.camera.width as usize; range @@ -191,7 +191,7 @@ impl Renderer { // TODO: Move lights iteration to Scene for light in &self.scene.lights { let ray = light.create_shadow_ray(intersection, Some(original_ray.medium_refraction)); - let distance_to_light = light.distance_to_light(&intersection); + let distance_to_light = light.distance_to_light(intersection); if self .scene .first_intersection(ray, false, distance_to_light) diff --git a/src/texture/file.rs b/src/texture/file.rs index b093539..f2d42d0 100644 --- a/src/texture/file.rs +++ b/src/texture/file.rs @@ -16,7 +16,7 @@ pub struct FileError { impl From for FileError { fn from(cause: image::ImageError) -> Self { - let description = String::from(cause.to_string()); + let description = cause.to_string(); FileError { cause, description } } } From 110fd0c81bf608c149269ac990619452740b87eb Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 12:02:17 +0100 Subject: [PATCH 2/7] Upgrade edition to 2018 --- Cargo.toml | 1 + src/camera.rs | 6 +++--- src/config/light.rs | 2 +- src/config/material.rs | 2 +- src/config/mod.rs | 2 +- src/config/object.rs | 2 +- src/config/transform.rs | 4 ++-- src/config_loader.rs | 16 ++++++++-------- src/geometry/aabb.rs | 12 ++++++------ src/geometry/extent_volume.rs | 2 +- src/geometry/instance.rs | 12 ++++++------ src/geometry/mesh.rs | 10 +++++----- src/geometry/mod.rs | 8 ++++---- src/geometry/octtree.rs | 10 ++++------ src/geometry/plane.rs | 12 ++++++------ src/geometry/simple_triangle_storage.rs | 4 ++-- src/geometry/sphere.rs | 25 +++++++++++++------------ src/geometry/triangle.rs | 21 +++++++++++---------- src/intersection.rs | 8 ++++---- src/lib.rs | 2 -- src/light/directional.rs | 11 +++++------ src/light/mod.rs | 8 ++++---- src/light/point.rs | 10 +++++----- src/main.rs | 2 -- src/material.rs | 4 ++-- src/math/matrix4.rs | 3 ++- src/math/mod.rs | 2 +- src/math/three_dimensions.rs | 3 +-- src/math/transform.rs | 2 +- src/math/two_dimensions.rs | 4 ++-- src/mesh_loader.rs | 14 ++++++++------ src/ray.rs | 2 +- src/renderer.rs | 17 +++++++++-------- src/scene.rs | 22 +++++++++++----------- src/texture/file.rs | 3 ++- src/texture/mod.rs | 5 +++-- src/texture/procedural/checkerboard.rs | 3 ++- src/texture/procedural/julia.rs | 4 ++-- src/texture/procedural/mandelbrot.rs | 4 ++-- src/texture/procedural/mod.rs | 3 ++- src/texture/solid.rs | 3 ++- 41 files changed, 147 insertions(+), 143 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index afc1b88..3c7f5ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "rusttracer" version = "0.1.0" authors = ["Hugo Tunius ", "Andrew Aylett "] +edition = "2018" [dependencies] image = "*" diff --git a/src/camera.rs b/src/camera.rs index 153e7d4..7995b76 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -1,6 +1,6 @@ -use config; -use math::{Matrix4, Point3, Vector3}; -use ray::Ray; +use crate::config; +use crate::math::{Matrix4, Point3, Vector3}; +use crate::ray::Ray; #[derive(Debug)] pub struct Camera { diff --git a/src/config/light.rs b/src/config/light.rs index 4eb37e2..39b1021 100644 --- a/src/config/light.rs +++ b/src/config/light.rs @@ -1,4 +1,4 @@ -use light::Falloff; +use crate::light::Falloff; #[derive(Deserialize, Debug)] #[serde(tag = "type")] diff --git a/src/config/material.rs b/src/config/material.rs index 51c5fef..1fc315e 100644 --- a/src/config/material.rs +++ b/src/config/material.rs @@ -1,4 +1,4 @@ -use material::IllumninationModel; +use crate::material::IllumninationModel; #[derive(Deserialize, Debug, Clone)] pub enum Texture { diff --git a/src/config/mod.rs b/src/config/mod.rs index 3d2c68e..5ec409c 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -21,7 +21,7 @@ use std::io::Read; use serde_json; -use renderer::SuperSampling; +use crate::renderer::SuperSampling; #[derive(Debug)] pub struct ConfigError { diff --git a/src/config/object.rs b/src/config/object.rs index e4db1e3..45ac2fd 100644 --- a/src/config/object.rs +++ b/src/config/object.rs @@ -1,4 +1,4 @@ -use config::Transform; +use super::Transform; #[derive(Deserialize, Debug)] #[serde(tag = "type")] diff --git a/src/config/transform.rs b/src/config/transform.rs index aeaa1d4..5126b54 100644 --- a/src/config/transform.rs +++ b/src/config/transform.rs @@ -1,5 +1,5 @@ -use geometry::Transformable; -use math; +use crate::geometry::Transformable; +use crate::math; #[derive(Deserialize, Debug)] #[serde(tag = "type")] diff --git a/src/config_loader.rs b/src/config_loader.rs index 0ce52cb..30b7469 100644 --- a/src/config_loader.rs +++ b/src/config_loader.rs @@ -2,14 +2,14 @@ use std::collections::HashMap; use std::path::Path; use std::rc::Rc; -use camera; -use color::Color; -use config; -use material; -use mesh_loader::MeshLoader; -use renderer; -use scene; -use texture; +use crate::camera; +use crate::color::Color; +use crate::config; +use crate::material; +use crate::mesh_loader::MeshLoader; +use crate::renderer; +use crate::scene; +use crate::texture; pub struct ConfigLoader { fallback_material: Rc, diff --git a/src/geometry/aabb.rs b/src/geometry/aabb.rs index dce7cae..faf66dc 100644 --- a/src/geometry/aabb.rs +++ b/src/geometry/aabb.rs @@ -1,6 +1,6 @@ use super::{BoundingVolume, Triangle}; -use math::{Point3, Vector3}; -use ray::Ray; +use crate::math::{Point3, Vector3}; +use crate::ray::Ray; #[derive(Debug, Clone)] pub struct AABB { @@ -153,10 +153,10 @@ mod tests { use std::rc::Rc; use super::AABB; - use color::Color; - use geometry::triangle::{Normal, Triangle}; - use material::{IllumninationModel, Material}; - use math::{Point3, Vector3}; + use crate::color::Color; + use crate::geometry::triangle::{Normal, Triangle}; + use crate::material::{IllumninationModel, Material}; + use crate::math::{Point3, Vector3}; fn make_material() -> Material { Material::new( diff --git a/src/geometry/extent_volume.rs b/src/geometry/extent_volume.rs index acd1e7b..951b06c 100644 --- a/src/geometry/extent_volume.rs +++ b/src/geometry/extent_volume.rs @@ -1,7 +1,7 @@ use std::mem; use super::{BoundingVolume, Ray, Triangle}; -use math::Vector3; +use crate::math::Vector3; // This approach is based on Ray Tracing Complex Scenes, Kay and Kajiya, 1986[0]. // diff --git a/src/geometry/instance.rs b/src/geometry/instance.rs index 76ea0fb..764877f 100644 --- a/src/geometry/instance.rs +++ b/src/geometry/instance.rs @@ -1,11 +1,11 @@ use std::rc::Rc; -use geometry::mesh::Mesh; -use geometry::{BoundingVolume, Intersectable, Shape, Transformable, TriangleStorage}; -use intersection::Intersection; -use material::Material; -use math::{Matrix4, Transform}; -use ray::Ray; +use crate::geometry::mesh::Mesh; +use crate::geometry::{BoundingVolume, Intersectable, Shape, Transformable, TriangleStorage}; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::{Matrix4, Transform}; +use crate::ray::Ray; pub struct Instance { mesh: Rc>, diff --git a/src/geometry/mesh.rs b/src/geometry/mesh.rs index a3d4dc7..67fcfca 100644 --- a/src/geometry/mesh.rs +++ b/src/geometry/mesh.rs @@ -1,10 +1,10 @@ use std::rc::Rc; -use geometry::triangle::Normal; -use geometry::{BoundingVolume, Intersectable, Material, Transformable, Triangle, TriangleStorage}; -use intersection::Intersection; -use math::{Point3, Transform}; -use ray::Ray; +use super::triangle::Normal; +use super::{BoundingVolume, Intersectable, Material, Transformable, Triangle, TriangleStorage}; +use crate::intersection::Intersection; +use crate::math::{Point3, Transform}; +use crate::ray::Ray; #[derive(Debug)] pub struct Mesh { diff --git a/src/geometry/mod.rs b/src/geometry/mod.rs index 98f4725..805cf54 100644 --- a/src/geometry/mod.rs +++ b/src/geometry/mod.rs @@ -19,10 +19,10 @@ pub use self::triangle::Triangle; pub use self::octtree::Octree; pub use self::simple_triangle_storage::SimpleTriangleStorage; -use intersection::Intersection; -use material::Material; -use math::Transform; -use ray::Ray; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::Transform; +use crate::ray::Ray; pub trait Intersectable { fn intersect(&self, ray: Ray, cull: bool) -> Option; diff --git a/src/geometry/octtree.rs b/src/geometry/octtree.rs index 643b854..b3be798 100644 --- a/src/geometry/octtree.rs +++ b/src/geometry/octtree.rs @@ -2,9 +2,9 @@ use std::collections::{HashSet, VecDeque}; use std::ops::{Index, IndexMut}; use super::{BoundingVolume, Transformable, Triangle, TriangleStorage, AABB}; -use math::Point3; -use math::Transform; -use ray::Ray; +use crate::math::Point3; +use crate::math::Transform; +use crate::ray::Ray; #[derive(Debug, Clone, Copy)] struct NodeId(usize); @@ -381,9 +381,7 @@ impl<'a> TriangleStorage<'a> for Octree { #[cfg(test)] mod tests { - use super::Octree; - use geometry::AABB; - use math::Point3; + use super::*; #[test] fn test_build_octants() { diff --git a/src/geometry/plane.rs b/src/geometry/plane.rs index 431888d..5972282 100644 --- a/src/geometry/plane.rs +++ b/src/geometry/plane.rs @@ -1,11 +1,11 @@ use std::rc::Rc; -use geometry::{Intersectable, Shape, Transformable}; -use intersection::Intersection; -use material::Material; -use math::EPSILON; -use math::{Point3, Transform, Vector3}; -use ray::Ray; +use super::{Intersectable, Shape, Transformable}; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::EPSILON; +use crate::math::{Point3, Transform, Vector3}; +use crate::ray::Ray; pub struct Plane { pub origin: Point3, diff --git a/src/geometry/simple_triangle_storage.rs b/src/geometry/simple_triangle_storage.rs index 2ecc5f9..8d7e936 100644 --- a/src/geometry/simple_triangle_storage.rs +++ b/src/geometry/simple_triangle_storage.rs @@ -1,6 +1,6 @@ use super::{Transformable, Triangle, TriangleStorage}; -use math::Transform; -use ray::Ray; +use crate::math::Transform; +use crate::ray::Ray; #[derive(Debug)] pub struct SimpleTriangleStorage { diff --git a/src/geometry/sphere.rs b/src/geometry/sphere.rs index 541c3cc..f54769a 100644 --- a/src/geometry/sphere.rs +++ b/src/geometry/sphere.rs @@ -1,12 +1,13 @@ use std::f32::consts::PI; use std::rc::Rc; -use geometry::{Intersectable, Shape, Transformable}; -use intersection::Intersection; -use material::Material; -use math::{Point3, Transform}; -use ray::Ray; -use texture::TextureCoord; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::{Point3, Transform}; +use crate::ray::Ray; +use crate::texture::TextureCoord; + +use super::{Intersectable, Shape, Transformable}; #[derive(Debug)] pub struct Sphere { @@ -91,12 +92,12 @@ impl Transformable for Sphere { mod tests { use std::rc::Rc; - use super::Sphere; - use color::Color; - use geometry::Shape; - use material::{IllumninationModel, Material, MaterialTemplate}; - use math::{Point3, Vector3, EPSILON}; - use ray::Ray; + use super::*; + use crate::color::Color; + use crate::geometry::Shape; + use crate::material::{IllumninationModel, Material, MaterialTemplate}; + use crate::math::{Vector3, EPSILON}; + use crate::ray::Ray; fn build_test_material() -> Rc { let color = Color::new(0, 0, 0); diff --git a/src/geometry/triangle.rs b/src/geometry/triangle.rs index 6123720..0e9ec3e 100644 --- a/src/geometry/triangle.rs +++ b/src/geometry/triangle.rs @@ -1,19 +1,20 @@ use std::rc::Rc; -use geometry::{Intersectable, Shape, Transformable}; -use intersection::Intersection; -use material::Material; -use math::EPSILON; -use math::{Point3, Transform, Vector3}; -use ray::Ray; -use texture::TextureCoord; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::EPSILON; +use crate::math::{Point3, Transform, Vector3}; +use crate::ray::Ray; +use crate::texture::TextureCoord; + +use super::{Intersectable, Shape, Transformable}; #[cfg(feature = "stats")] pub mod stats { - use std::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT}; + use std::sync::atomic::{AtomicUsize, Ordering}; - static TRIANGLE_INTERSECTION_TEST_COUNT: AtomicUsize = ATOMIC_USIZE_INIT; - static TRIANGLE_INTERSECTION_HIT_COUNT: AtomicUsize = ATOMIC_USIZE_INIT; + static TRIANGLE_INTERSECTION_TEST_COUNT: AtomicUsize = AtomicUsize::new(0); + static TRIANGLE_INTERSECTION_HIT_COUNT: AtomicUsize = AtomicUsize::new(0); pub fn record_triangle_intersection() { TRIANGLE_INTERSECTION_TEST_COUNT.fetch_add(1, Ordering::SeqCst); diff --git a/src/intersection.rs b/src/intersection.rs index 50a069e..11305f8 100644 --- a/src/intersection.rs +++ b/src/intersection.rs @@ -1,7 +1,7 @@ -use geometry::Shape; -use math::{Point3, Vector3}; -use ray::Ray; -use texture::TextureCoord; +use crate::geometry::Shape; +use crate::math::{Point3, Vector3}; +use crate::ray::Ray; +use crate::texture::TextureCoord; #[derive(Copy, Clone)] pub struct Intersection<'a> { diff --git a/src/lib.rs b/src/lib.rs index 06d5abf..c91878f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![cfg_attr(feature = "clippy", feature(plugin))] -#![cfg_attr(feature = "clippy", plugin(clippy))] extern crate rayon; extern crate serde; #[macro_use] diff --git a/src/light/directional.rs b/src/light/directional.rs index 94834e5..4cbebd3 100644 --- a/src/light/directional.rs +++ b/src/light/directional.rs @@ -1,11 +1,10 @@ use std::f32; -use color::Color; -use intersection::Intersection; -use material::Material; -use math::{Vector3}; - -use ray::Ray; +use crate::color::Color; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::Vector3; +use crate::ray::Ray; use super::Light; diff --git a/src/light/mod.rs b/src/light/mod.rs index ee9e70d..9cd7d1e 100644 --- a/src/light/mod.rs +++ b/src/light/mod.rs @@ -1,7 +1,7 @@ -use color::Color; -use intersection::Intersection; -use material::Material; -use ray::Ray; +use crate::color::Color; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::ray::Ray; pub mod directional; pub mod point; diff --git a/src/light/point.rs b/src/light/point.rs index 83c2a44..e913745 100644 --- a/src/light/point.rs +++ b/src/light/point.rs @@ -1,8 +1,8 @@ -use color::Color; -use intersection::Intersection; -use material::Material; -use math::{Point3}; -use ray::Ray; +use crate::color::Color; +use crate::intersection::Intersection; +use crate::material::Material; +use crate::math::Point3; +use crate::ray::Ray; use super::{Falloff, Light}; diff --git a/src/main.rs b/src/main.rs index 9644c14..a9f135a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,3 @@ -#![cfg_attr(feature = "clippy", feature(plugin))] -#![cfg_attr(feature = "clippy", plugin(clippy))] extern crate getopts; extern crate image; diff --git a/src/material.rs b/src/material.rs index 4a04dd7..85dc08a 100644 --- a/src/material.rs +++ b/src/material.rs @@ -3,8 +3,8 @@ use std::error::Error; use std::fmt; use std::rc::Rc; -use color::Color; -use texture::{Texture, TextureCoord}; +use crate::color::Color; +use crate::texture::{Texture, TextureCoord}; #[derive(Debug)] pub struct IllumninationModelParsingError { diff --git a/src/math/matrix4.rs b/src/math/matrix4.rs index 7b281e3..eef1b3f 100644 --- a/src/math/matrix4.rs +++ b/src/math/matrix4.rs @@ -1,6 +1,7 @@ -use math::EPSILON; use std::ops::{Index, IndexMut, Mul}; +use super::EPSILON; + #[derive(Debug, Copy, Clone)] pub struct Matrix4 { // Rows in the outer slice and columns in the inner diff --git a/src/math/mod.rs b/src/math/mod.rs index 7ccec93..a6960cf 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -57,4 +57,4 @@ pub use self::complex::Complex; pub use self::matrix4::Matrix4; pub use self::three_dimensions::{Point3, Vector3}; pub use self::transform::Transform; -pub use self::two_dimensions::{Point2}; +pub use self::two_dimensions::Point2; diff --git a/src/math/three_dimensions.rs b/src/math/three_dimensions.rs index a5db62b..0fa34d9 100644 --- a/src/math/three_dimensions.rs +++ b/src/math/three_dimensions.rs @@ -283,8 +283,7 @@ impl Mul for Matrix4 { } #[cfg(test)] mod tests { - use super::{Point3, Vector3}; - use math::Matrix4; + use super::*; use std::f32::consts::PI; const EPSILON: f32 = 1e-3; diff --git a/src/math/transform.rs b/src/math/transform.rs index d99fcb3..7323909 100644 --- a/src/math/transform.rs +++ b/src/math/transform.rs @@ -1,4 +1,4 @@ -use math::Matrix4; +use super::Matrix4; pub struct Transform { pub matrix: Matrix4, diff --git a/src/math/two_dimensions.rs b/src/math/two_dimensions.rs index c96060b..c0ba332 100644 --- a/src/math/two_dimensions.rs +++ b/src/math/two_dimensions.rs @@ -210,8 +210,8 @@ impl Neg for Vector2 { #[cfg(test)] mod tests { - use super::{Point2, Vector2}; - use math::EPSILON; + use super::super::EPSILON; + use super::*; #[test] fn test_new() { diff --git a/src/mesh_loader.rs b/src/mesh_loader.rs index 1580347..596ee90 100644 --- a/src/mesh_loader.rs +++ b/src/mesh_loader.rs @@ -7,12 +7,14 @@ use std::fmt; use std::path::{Path, PathBuf}; use std::rc::Rc; -use color::Color; -use geometry::triangle::Normal; -use geometry::{BoundingVolume, Instance, Mesh, Triangle, TriangleStorage}; -use material::{IllumninationModel, IllumninationModelParsingError, Material, OptionalTexture}; -use math::{Point3, Vector3}; -use texture; +use crate::color::Color; +use crate::geometry::triangle::Normal; +use crate::geometry::{BoundingVolume, Instance, Mesh, Triangle, TriangleStorage}; +use crate::material::{ + IllumninationModel, IllumninationModelParsingError, Material, OptionalTexture, +}; +use crate::math::{Point3, Vector3}; +use crate::texture; #[derive(Debug)] pub enum MeshLoadError { diff --git a/src/ray.rs b/src/ray.rs index 3675ead..84c2168 100644 --- a/src/ray.rs +++ b/src/ray.rs @@ -1,4 +1,4 @@ -use math::{Point3, Vector3}; +use crate::math::{Point3, Vector3}; #[derive(Debug, Copy, Clone)] pub struct Ray { diff --git a/src/renderer.rs b/src/renderer.rs index 8c19fd3..a17b4cb 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -1,13 +1,14 @@ -use camera::Camera; -use color::Color; -use intersection::Intersection; -use material::{IllumninationModel, Material}; -use math::Vector3; -use ray::Ray; -use scene::Scene; +use std::ops::Range; use rayon::prelude::*; -use std::ops::Range; + +use crate::camera::Camera; +use crate::color::Color; +use crate::intersection::Intersection; +use crate::material::{IllumninationModel, Material}; +use crate::math::Vector3; +use crate::ray::Ray; +use crate::scene::Scene; const RAY_OFFSET: f32 = 1e-3; const GAMMA: f32 = 1.8; diff --git a/src/scene.rs b/src/scene.rs index 7dffafe..b3bcc9c 100644 --- a/src/scene.rs +++ b/src/scene.rs @@ -4,17 +4,17 @@ use std::fmt; use std::path::Path; use std::rc::Rc; -use color::Color; -use config; -use config::Object; -use geometry::{ExtentVolume, Intersectable, Octree, Transformable}; -use geometry::{Plane, Sphere}; -use intersection::Intersection; -use light; -use material::Material; -use math::{Point3, Vector3}; -use mesh_loader::MeshLoader; -use ray::Ray; +use crate::color::Color; +use crate::config; +use crate::config::Object; +use crate::geometry::{ExtentVolume, Intersectable, Octree, Transformable}; +use crate::geometry::{Plane, Sphere}; +use crate::intersection::Intersection; +use crate::light; +use crate::material::Material; +use crate::math::{Point3, Vector3}; +use crate::mesh_loader::MeshLoader; +use crate::ray::Ray; #[derive(Debug, Clone)] pub struct SceneConfigLoadError { diff --git a/src/texture/file.rs b/src/texture/file.rs index f2d42d0..87bc89e 100644 --- a/src/texture/file.rs +++ b/src/texture/file.rs @@ -5,8 +5,9 @@ use std::path::PathBuf; use image; use image::GenericImageView; +use crate::color::Color; + use super::{Texture, TextureCoord}; -use color::Color; #[derive(Debug)] pub struct FileError { diff --git a/src/texture/mod.rs b/src/texture/mod.rs index f9253b9..2287f97 100644 --- a/src/texture/mod.rs +++ b/src/texture/mod.rs @@ -1,7 +1,8 @@ -use color::Color; -use math::Point2; use std::fmt::Debug; +use crate::color::Color; +use crate::math::Point2; + pub mod file; pub mod procedural; mod solid; diff --git a/src/texture/procedural/checkerboard.rs b/src/texture/procedural/checkerboard.rs index 92ee940..6b8baaa 100644 --- a/src/texture/procedural/checkerboard.rs +++ b/src/texture/procedural/checkerboard.rs @@ -1,5 +1,6 @@ +use crate::color::Color; + use super::TextureCoord; -use color::Color; const SCALE: f32 = 5.0; const ROTATION: f32 = std::f32::consts::PI / 4.0; diff --git a/src/texture/procedural/julia.rs b/src/texture/procedural/julia.rs index e7a325b..b9f6f3e 100644 --- a/src/texture/procedural/julia.rs +++ b/src/texture/procedural/julia.rs @@ -1,6 +1,6 @@ use super::TextureCoord; -use color::Color; -use math::Complex; +use crate::color::Color; +use crate::math::Complex; const MAX: Complex = Complex::new(2.0, 2.0); const MIN: Complex = Complex::new(-2.0, -2.0); diff --git a/src/texture/procedural/mandelbrot.rs b/src/texture/procedural/mandelbrot.rs index 12a50ba..7bdc4cd 100644 --- a/src/texture/procedural/mandelbrot.rs +++ b/src/texture/procedural/mandelbrot.rs @@ -1,6 +1,6 @@ use super::TextureCoord; -use color::Color; -use math::Complex; +use crate::color::Color; +use crate::math::Complex; const MAX: Complex = Complex::new(1.0, 1.2); const MIN: Complex = Complex::new(-2.1, -1.2); diff --git a/src/texture/procedural/mod.rs b/src/texture/procedural/mod.rs index ce2d861..b1d247c 100644 --- a/src/texture/procedural/mod.rs +++ b/src/texture/procedural/mod.rs @@ -5,8 +5,9 @@ mod mandelbrot; use std::clone::Clone; use std::fmt; +use crate::color::Color; + use super::{Texture, TextureCoord}; -use color::Color; #[derive(Clone)] pub struct Procedural { diff --git a/src/texture/solid.rs b/src/texture/solid.rs index dc3c9a6..ce04a19 100644 --- a/src/texture/solid.rs +++ b/src/texture/solid.rs @@ -1,5 +1,6 @@ +use crate::color::Color; + use super::{Texture, TextureCoord}; -use color::Color; #[derive(Debug, Clone)] pub struct Solid { From 32373e375c0ecfa88ada4cebc2f3e76976544c0b Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 12:04:48 +0100 Subject: [PATCH 3/7] Upgrade to edition 2021 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3c7f5ea..7dfcc79 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "rusttracer" version = "0.1.0" authors = ["Hugo Tunius ", "Andrew Aylett "] -edition = "2018" +edition = "2021" [dependencies] image = "*" From d048a322f0ee78cb5b8dea19a177dcd433e5e861 Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 12:07:13 +0100 Subject: [PATCH 4/7] Clippy again(2021 edition) --- Cargo.lock | 139 +--------------------------------------------- Cargo.toml | 1 - src/config/mod.rs | 2 - 3 files changed, 2 insertions(+), 140 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 732cd4c..314593f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,30 +14,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - [[package]] name = "bit_field" version = "0.10.1" @@ -50,17 +32,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - [[package]] name = "bumpalo" version = "3.9.1" @@ -85,27 +56,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clippy" -version = "0.0.302" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d911ee15579a3f50880d8c1d59ef6e79f9533127a3bd342462f5d584f5e8c294" -dependencies = [ - "term", -] - [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "crc32fast" version = "1.3.2" @@ -168,17 +124,6 @@ dependencies = [ "adler32", ] -[[package]] -name = "dirs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "either" version = "1.6.1" @@ -247,17 +192,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.4" @@ -267,7 +201,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -425,7 +359,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "729eb334247daa1803e0a094d0a5c55711b85571179f5ec6e53eccfdf7008958" dependencies = [ - "getrandom 0.2.4", + "getrandom", ] [[package]] @@ -554,40 +488,10 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_users" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" -dependencies = [ - "getrandom 0.1.16", - "redox_syscall", - "rust-argon2", -] - -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", -] - [[package]] name = "rusttracer" version = "0.1.0" dependencies = [ - "clippy", "getopts", "image", "rayon", @@ -670,17 +574,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "term" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" -dependencies = [ - "byteorder", - "dirs", - "winapi", -] - [[package]] name = "threadpool" version = "1.8.1" @@ -728,12 +621,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -799,25 +686,3 @@ name = "weezl" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index 7dfcc79..e942fdc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ serde = "1.0.12" serde_derive = "1.0.12" serde_json = "1.0" getopts = "0.2.4" -clippy={version = "*", optional = true} toml="0.5" [features] diff --git a/src/config/mod.rs b/src/config/mod.rs index 5ec409c..737c344 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -19,8 +19,6 @@ use std::fs::File; use std::io; use std::io::Read; -use serde_json; - use crate::renderer::SuperSampling; #[derive(Debug)] From 27c9f8854c63d88a3926eb1ce798b8e77d492234 Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 12:11:21 +0100 Subject: [PATCH 5/7] Upgrade serde Remove separate derive crate in favour of feature --- Cargo.lock | 4 +++- Cargo.toml | 3 +-- src/config/camera.rs | 2 ++ src/config/light.rs | 2 ++ src/config/material.rs | 2 ++ src/config/mod.rs | 2 ++ src/config/object.rs | 2 ++ src/config/scene.rs | 2 ++ src/config/transform.rs | 2 ++ src/lib.rs | 7 ------- src/light/mod.rs | 2 ++ src/material.rs | 2 ++ src/math/three_dimensions.rs | 5 ++++- src/math/two_dimensions.rs | 2 ++ src/renderer.rs | 1 + 15 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 314593f..6ea7c4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -496,7 +496,6 @@ dependencies = [ "image", "rayon", "serde", - "serde_derive", "serde_json", "tobj", "toml", @@ -525,6 +524,9 @@ name = "serde" version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" diff --git a/Cargo.toml b/Cargo.toml index e942fdc..5414cd2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,7 @@ edition = "2021" image = "*" rayon="1.3.0" tobj="1.0.0" -serde = "1.0.12" -serde_derive = "1.0.12" +serde = { version = "1", features = ["derive"] } serde_json = "1.0" getopts = "0.2.4" toml="0.5" diff --git a/src/config/camera.rs b/src/config/camera.rs index ae68a4f..5ccf039 100644 --- a/src/config/camera.rs +++ b/src/config/camera.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + #[derive(Deserialize, Debug)] pub struct Camera { pub fov: f32, diff --git a/src/config/light.rs b/src/config/light.rs index 39b1021..f7c5c57 100644 --- a/src/config/light.rs +++ b/src/config/light.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use crate::light::Falloff; #[derive(Deserialize, Debug)] diff --git a/src/config/material.rs b/src/config/material.rs index 1fc315e..126c1d4 100644 --- a/src/config/material.rs +++ b/src/config/material.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use crate::material::IllumninationModel; #[derive(Deserialize, Debug, Clone)] diff --git a/src/config/mod.rs b/src/config/mod.rs index 737c344..3b8ac7d 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -5,6 +5,8 @@ mod object; mod scene; mod transform; +use serde::Deserialize; + pub use self::camera::Camera; pub use self::light::Light; pub use self::material::Material; diff --git a/src/config/object.rs b/src/config/object.rs index 45ac2fd..80ef1a8 100644 --- a/src/config/object.rs +++ b/src/config/object.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use super::Transform; #[derive(Deserialize, Debug)] diff --git a/src/config/scene.rs b/src/config/scene.rs index b972efb..24bfdf0 100644 --- a/src/config/scene.rs +++ b/src/config/scene.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use super::light::Light; use super::object::Object; diff --git a/src/config/transform.rs b/src/config/transform.rs index 5126b54..33cf2a9 100644 --- a/src/config/transform.rs +++ b/src/config/transform.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use crate::geometry::Transformable; use crate::math; diff --git a/src/lib.rs b/src/lib.rs index c91878f..33559e8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,3 @@ -extern crate rayon; -extern crate serde; -#[macro_use] -extern crate serde_derive; -extern crate image; -extern crate serde_json; - #[macro_use] mod math; mod config_loader; diff --git a/src/light/mod.rs b/src/light/mod.rs index 9cd7d1e..1101575 100644 --- a/src/light/mod.rs +++ b/src/light/mod.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; + use crate::color::Color; use crate::intersection::Intersection; use crate::material::Material; diff --git a/src/material.rs b/src/material.rs index 85dc08a..43850b9 100644 --- a/src/material.rs +++ b/src/material.rs @@ -3,6 +3,8 @@ use std::error::Error; use std::fmt; use std::rc::Rc; +use serde::Deserialize; + use crate::color::Color; use crate::texture::{Texture, TextureCoord}; diff --git a/src/math/three_dimensions.rs b/src/math/three_dimensions.rs index 0fa34d9..ecc20f2 100644 --- a/src/math/three_dimensions.rs +++ b/src/math/three_dimensions.rs @@ -1,6 +1,9 @@ -use super::Matrix4; use std::ops::{Add, Mul, Neg, Sub}; +use serde::Deserialize; + +use super::Matrix4; + macro_rules! define_struct { ($T:ident) => { #[derive(Debug, Copy, Clone, Deserialize)] diff --git a/src/math/two_dimensions.rs b/src/math/two_dimensions.rs index c0ba332..c4c63d9 100644 --- a/src/math/two_dimensions.rs +++ b/src/math/two_dimensions.rs @@ -1,5 +1,7 @@ use std::ops::{Add, Mul, Neg, Sub}; +use serde::Deserialize; + macro_rules! define_struct { ($T:ident) => { #[derive(Debug, Copy, Clone, Deserialize)] diff --git a/src/renderer.rs b/src/renderer.rs index a17b4cb..5ef7686 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -1,6 +1,7 @@ use std::ops::Range; use rayon::prelude::*; +use serde::Deserialize; use crate::camera::Camera; use crate::color::Color; From b8877724eeb9477517e906a0dce10894a6b32fde Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 13:13:30 +0100 Subject: [PATCH 6/7] Update dependencies --- Cargo.lock | 921 +++++++++++++++++++++++++++++++++------------ Cargo.toml | 6 +- src/mesh_loader.rs | 64 +++- 3 files changed, 722 insertions(+), 269 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ea7c4c..0f78e6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,22 +9,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "adler32" -version = "1.2.0" +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "anyhow" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "av1-grain" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] [[package]] name = "bit_field" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" @@ -32,23 +97,62 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitstream-io" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c9989a51171e2e81038ab168b6ae22886fe9ded214430dbb4f41c28cf176da" + +[[package]] +name = "built" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16" + [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.7.3" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" +checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "cc" +version = "1.0.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] [[package]] name = "cfg-if" @@ -64,125 +168,100 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", - "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.7" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00d6d2ea26e8b151d99093005cb442fb9a37aeaca582a03ec70946f49ab5ed9" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "cfg-if", "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.7" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e5bed1f1c269533fa816a0a5492b3545209a205ca1a54842be180eb63a16a6" -dependencies = [ - "cfg-if", - "lazy_static", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] -name = "deflate" -version = "1.0.0" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" -dependencies = [ - "adler32", -] +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "either" -version = "1.6.1" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "exr" -version = "1.4.1" +version = "1.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4badb9489a465cb2c555af1f00f0bfd8cecd6fc12ac11da9d5b40c5dd5f0200" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" dependencies = [ "bit_field", - "deflate", "flume", "half", - "inflate", "lebe", + "miniz_oxide", + "rayon-core", "smallvec", - "threadpool", + "zune-inflate", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", ] [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ - "cfg-if", "crc32fast", - "libc", - "miniz_oxide 0.4.4", + "miniz_oxide", ] [[package]] name = "flume" -version = "0.10.10" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d04dafd11240188e146b6f6476a898004cace3be31d4ec5e08e216bf4947ac0" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", "spin", ] -[[package]] -name = "futures-core" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" - -[[package]] -name = "futures-sink" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" - [[package]] name = "getopts" version = "0.2.21" @@ -194,22 +273,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] name = "gif" -version = "0.11.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" dependencies = [ "color_quant", "weezl", @@ -217,275 +294,466 @@ dependencies = [ [[package]] name = "half" -version = "1.8.2" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "image" -version = "0.24.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94ac3d41f882c624a82d7945952032388488681f45f9d4077999a6c85688d61" +checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", "gif", - "jpeg-decoder 0.2.2", - "num-iter", - "num-rational", + "image-webp", "num-traits", "png", - "scoped_threadpool", + "qoi", + "ravif", + "rayon", + "rgb", "tiff", + "zune-core", + "zune-jpeg", ] [[package]] -name = "inflate" -version = "0.4.5" +name = "image-webp" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" dependencies = [ - "adler32", + "byteorder-lite", + "thiserror", ] [[package]] -name = "itoa" -version = "1.0.1" +name = "imgref" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" [[package]] -name = "jpeg-decoder" -version = "0.1.22" +name = "indexmap" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] [[package]] -name = "jpeg-decoder" -version = "0.2.2" +name = "interpolate_name" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "105fb082d64e2100074587f59a74231f771750c664af903f1f9f76c9dedfc6f1" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ - "rayon", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "js-sys" -version = "0.3.56" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ - "wasm-bindgen", + "either", ] [[package]] -name = "lazy_static" -version = "1.4.0" +name = "itoa" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "lebe" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efd1d698db0759e6ef11a7cd44407407399a910c774dd804c64c032da7826ff" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.117" +version = "0.2.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] -name = "memoffset" -version = "0.6.5" +name = "loop9" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" dependencies = [ - "autocfg", + "imgref", ] [[package]] -name = "miniz_oxide" -version = "0.4.4" +name = "maybe-rayon" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ - "adler", - "autocfg", + "cfg-if", + "rayon", ] +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" -version = "0.5.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", + "simd-adler32", ] [[package]] -name = "nanorand" -version = "0.6.1" +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729eb334247daa1803e0a094d0a5c55711b85571179f5ec6e53eccfdf7008958" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "getrandom", + "memchr", + "minimal-lexical", ] [[package]] -name = "num-integer" -version = "0.1.44" +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", + "num-integer", "num-traits", ] [[package]] -name = "num-iter" -version = "0.1.42" +name = "num-derive" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", - "num-integer", "num-traits", ] [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] -name = "num_cpus" -version = "1.13.1" +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "png" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ - "hermit-abi", - "libc", + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", ] [[package]] -name = "pin-project" -version = "1.0.10" +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" dependencies = [ - "pin-project-internal", + "unicode-ident", ] [[package]] -name = "pin-project-internal" -version = "1.0.10" +name = "profiling" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ - "proc-macro2", "quote", "syn", ] [[package]] -name = "png" -version = "0.17.3" +name = "qoi" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8f1882177b17c98ec33a51f5910ecbf4db92ca0def706781a1f8d0c661f393" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" dependencies = [ - "bitflags", - "crc32fast", - "deflate", - "miniz_oxide 0.5.1", + "bytemuck", ] [[package]] -name = "proc-macro2" +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quote" version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "unicode-xid", + "proc-macro2", ] [[package]] -name = "quote" -version = "1.0.15" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "proc-macro2", + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", ] [[package]] name = "rayon" -version = "1.5.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", - "num_cpus", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", ] [[package]] @@ -498,41 +766,35 @@ dependencies = [ "serde", "serde_json", "tobj", - "toml", + "toml 0.5.11", ] [[package]] name = "ryu" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" - -[[package]] -name = "scoped_threadpool" -version = "0.1.9" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.200" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.200" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" dependencies = [ "proc-macro2", "quote", @@ -541,99 +803,213 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "smallvec" -version = "1.8.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "spin" -version = "0.9.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] [[package]] name = "syn" -version = "1.0.86" +version = "2.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.12", + "version-compare", ] [[package]] -name = "threadpool" -version = "1.8.1" +name = "target-lexicon" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "thiserror" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" dependencies = [ - "num_cpus", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "tiff" -version = "0.7.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0247608e998cb6ce39dfc8f4a16c50361ce71e5b52e6d24ea1227ea8ea8ee0b2" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", - "jpeg-decoder 0.1.22", + "jpeg-decoder", "weezl", ] [[package]] name = "tobj" -version = "1.0.0" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3bd4ba05f29e4c65b6c0c11a58b6465ffa820bac890d76ad407b4e81d8372e8" +dependencies = [ + "ahash", +] + +[[package]] +name = "toml" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b9d0bafde95a2f8f50dd3c10bc127b462efa8c3c0b60dfa276b7e032100e21d" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] [[package]] name = "toml" -version = "0.5.8" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" dependencies = [ + "indexmap", "serde", + "serde_spanned", + "toml_datetime", + "winnow", ] +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -641,13 +1017,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -656,9 +1032,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -666,9 +1042,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -679,12 +1055,65 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "weezl" -version = "0.1.5" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winnow" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" +checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index 5414cd2..aa5e386 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,9 +5,9 @@ authors = ["Hugo Tunius ", "Andrew Aylett "] edition = "2021" [dependencies] -image = "*" -rayon="1.3.0" -tobj="1.0.0" +image = "0.25" +rayon = "1" +tobj = "4.0.0" serde = { version = "1", features = ["derive"] } serde_json = "1.0" getopts = "0.2.4" diff --git a/src/mesh_loader.rs b/src/mesh_loader.rs index 596ee90..dc431dc 100644 --- a/src/mesh_loader.rs +++ b/src/mesh_loader.rs @@ -238,14 +238,30 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { self.obj_cache .entry(path.to_string_lossy().to_string()) .or_insert_with(|| { - let result = tobj::load_obj(path); + let result = tobj::load_obj( + path, + &tobj::LoadOptions { + single_index: false, + triangulate: true, + ignore_points: true, + ignore_lines: true, + }, + ); // TODO: Better error handling - if let Err(ref error) = result { - println!("Load error: {}", error); - } - assert!(result.is_ok()); - - Rc::new(result.unwrap()) + let (models, materials) = result.unwrap_or_else(|e| { + panic!( + "Failed to load data from {} with error: {}", + path.display(), + e + ) + }); + let materials = materials.unwrap_or_else(|e| { + println!("Failed to load materials for {:?} with error: {}", path, e); + + Vec::default() + }); + + Rc::new((models, materials)) }), ) } @@ -262,21 +278,28 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { None => IllumninationModel::DiffuseSpecular, }; - let ambient_texture = self.load_texture_from_file(path, &m.ambient_texture)?; - let diffuse_texture = self.load_texture_from_file(path, &m.diffuse_texture)?; - let specular_texture = self.load_texture_from_file(path, &m.specular_texture)?; + let ambient_texture = + self.load_texture_from_file(path, m.ambient_texture.as_deref())?; + let diffuse_texture = + self.load_texture_from_file(path, m.diffuse_texture.as_deref())?; + let specular_texture = + self.load_texture_from_file(path, m.specular_texture.as_deref())?; + + let ambient = m.ambient.unwrap_or([0.0; 3]); + let diffuse = m.diffuse.unwrap_or([0.0; 3]); + let specular = m.specular.unwrap_or([0.0; 3]); let mat = Rc::new(Material::new_with_textures( - Color::new_f32(m.ambient[0], m.ambient[1], m.ambient[2]), + Color::new_f32(ambient[0], ambient[1], ambient[2]), ambient_texture, - Color::new_f32(m.diffuse[0], m.diffuse[1], m.diffuse[2]), + Color::new_f32(diffuse[0], diffuse[1], diffuse[2]), diffuse_texture, - Color::new_f32(m.specular[0], m.specular[1], m.specular[2]), + Color::new_f32(specular[0], specular[1], specular[2]), specular_texture, - m.shininess, + m.shininess.unwrap_or(0.0), illumination_model, - Some(1000.0 / m.shininess), - Some(m.optical_density), + m.shininess.map(|s| 1000.0 / s), + m.optical_density, )); material_cache.insert(i, mat); @@ -288,16 +311,17 @@ impl<'a, V: BoundingVolume, S: 'a + TriangleStorage<'a>> MeshLoader { fn load_texture_from_file( &self, obj_path: &Path, - texture: &str, + texture: Option<&str>, ) -> Result { - if texture.is_empty() { + let Some(path) = texture else { return Ok(None) }; + if path.is_empty() { return Ok(None); } let full_path = if let Some(resolve_path) = obj_path.parent() { - resolve_path.join(texture) + resolve_path.join(path) } else { - PathBuf::from(texture) + PathBuf::from(path) }; let texture = texture::file::File::new(full_path)?; From ab824836b131788f6bcfc3dfe998d4b70bb2a364 Mon Sep 17 00:00:00 2001 From: Hugo Tunius Date: Mon, 6 May 2024 13:25:31 +0100 Subject: [PATCH 7/7] Remove unused dependency `toml` --- Cargo.lock | 12 +----------- Cargo.toml | 1 - 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f78e6f..fc11b9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -766,7 +766,6 @@ dependencies = [ "serde", "serde_json", "tobj", - "toml 0.5.11", ] [[package]] @@ -871,7 +870,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml 0.8.12", + "toml", "version-compare", ] @@ -921,15 +920,6 @@ dependencies = [ "ahash", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml" version = "0.8.12" diff --git a/Cargo.toml b/Cargo.toml index aa5e386..fa7a225 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,6 @@ tobj = "4.0.0" serde = { version = "1", features = ["derive"] } serde_json = "1.0" getopts = "0.2.4" -toml="0.5" [features] default = []