summaryrefslogtreecommitdiff
path: root/racer-tracer/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'racer-tracer/src/main.rs')
-rw-r--r--racer-tracer/src/main.rs44
1 files changed, 14 insertions, 30 deletions
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<RwLock<Vec<u32>>>,
camera: Arc<Camera>,
image: Arc<Image>,
- scene: Box<dyn Hittable + std::marker::Sync>,
+ scene: Box<dyn Hittable>,
max_depth: usize,
) {
- let scene: &(dyn Hittable + Sync) = scene.borrow();
+ let scene: &(dyn Hittable) = scene.borrow();
let v: Vec<Data> = (0..image.height)
.map(|row| {
(
@@ -150,7 +142,7 @@ fn render(
});
}
-type SharedMaterial = Arc<Box<dyn Material + Send + Sync>>;
+type SharedMaterial = Arc<Box<dyn Material>>;
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<Box<dyn Material + Send + Sync>> =
- Arc::new(Box::new(Lambertian::new(Color::new(1.0, 0.0, 0.0))));
- let green: Arc<Box<dyn Material + Send + Sync>> =
- Arc::new(Box::new(Lambertian::new(Color::new(0.0, 1.0, 0.0))));
- let metal_red: Arc<Box<dyn Material + Send + Sync>> =
- 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<dyn Hittable + Sync + Send> = Box::new(create_scene());
+ let scene: Box<dyn Hittable> = Box::new(create_scene());
let screen_buffer: Arc<RwLock<Vec<u32>>> =
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(