From 9d44f7ab04e6f6979e0eebc24f8fb439a23a3865 Mon Sep 17 00:00:00 2001 From: Sakarias Johansson Date: Thu, 12 Jan 2023 22:07:57 +0100 Subject: =?UTF-8?q?=F0=9F=A7=B9=20Minor=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Made the traits into supertraits so we don't have to mention Send and Sync everywhere. - Add methods for Vec3 that modifies the existing Vector. Can be used to make less copies. --- racer-tracer/src/main.rs | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) (limited to 'racer-tracer/src/main.rs') diff --git a/racer-tracer/src/main.rs b/racer-tracer/src/main.rs index 508c22a..ef2cb4a 100644 --- a/racer-tracer/src/main.rs +++ b/racer-tracer/src/main.rs @@ -22,16 +22,8 @@ use rayon::prelude::*; use vec3::Color; use crate::{ - camera::Camera, - error::TracerError, - geometry::sphere::Sphere, - geometry::Hittable, - image::Image, - ray::Ray, - scene::Scene, - util::random_double, - vec3::Vec3, - vec3::{random_in_hemisphere, random_unit_vector}, + camera::Camera, error::TracerError, geometry::sphere::Sphere, geometry::Hittable, image::Image, + ray::Ray, scene::Scene, util::random_double, vec3::Vec3, }; fn ray_color(scene: &dyn Hittable, ray: &Ray, depth: usize) -> Vec3 { @@ -93,7 +85,7 @@ fn raytrace( for _ in 0..image.samples_per_pixel { let u: f64 = (i as f64 + random_double()) / (image.width - 1) as f64; let v: f64 = (row as f64 + random_double()) / (image.height - 1) as f64; - colors[i] += ray_color(scene, &camera.get_ray(u, v), max_depth); + colors[i].add(ray_color(scene, &camera.get_ray(u, v), max_depth)); } // Update the screen buffer every now and again. @@ -130,10 +122,10 @@ fn render( buffer: Arc>>, camera: Arc, image: Arc, - scene: Box, + scene: Box, max_depth: usize, ) { - let scene: &(dyn Hittable + Sync) = scene.borrow(); + let scene: &(dyn Hittable) = scene.borrow(); let v: Vec = (0..image.height) .map(|row| { ( @@ -150,7 +142,7 @@ fn render( }); } -type SharedMaterial = Arc>; +type SharedMaterial = Arc>; fn create_scene() -> Scene { let mut scene = Scene::new(); let material_ground: SharedMaterial = @@ -183,20 +175,6 @@ fn create_scene() -> Scene { Arc::clone(&material_right), ))); scene - // Materials - /* let red: Arc> = - Arc::new(Box::new(Lambertian::new(Color::new(1.0, 0.0, 0.0)))); - let green: Arc> = - Arc::new(Box::new(Lambertian::new(Color::new(0.0, 1.0, 0.0)))); - let metal_red: Arc> = - Arc::new(Box::new(Metal::new(Color::new(1.0, 0.0, 0.0)))); - - // Geometry - let sphere1 = Sphere::new(Vec3::new(0.0, 0.0, -1.0), 0.5, Arc::clone(&metal_red)); - let sphere2 = Sphere::new(Vec3::new(0.0, -100.5, -1.0), 100.0, Arc::clone(&green)); - scene.add(Box::new(sphere1)); - scene.add(Box::new(sphere2)); - scene*/ } fn run( @@ -207,7 +185,7 @@ fn run( ) -> Result<(), TracerError> { let image = Arc::new(image::Image::new(aspect_ratio, screen_width, samples)); let camera = Arc::new(camera::Camera::new(&image, 2.0, 1.0)); - let scene: Box = Box::new(create_scene()); + let scene: Box = Box::new(create_scene()); let screen_buffer: Arc>> = Arc::new(RwLock::new(vec![0; image.width * image.height])); @@ -215,13 +193,19 @@ fn run( rayon::scope(|s| { s.spawn(|_| { + let render_time = Instant::now(); render( Arc::clone(&screen_buffer), camera, Arc::clone(&image), scene, max_depth, - ) + ); + + println!( + "It took {} seconds to render the image.", + Instant::now().duration_since(render_time).as_secs() + ); }); s.spawn(|_| { let result = Window::new( -- cgit v1.2.3