summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml1
-rw-r--r--src/camera.rs18
2 files changed, 17 insertions, 2 deletions
diff --git a/Cargo.toml b/Cargo.toml
index c383576..2adb9b1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,4 +5,5 @@ edition = "2021"
[dependencies]
image = "0.25.5"
+indicatif = "0.17.11"
rand = "0.9.0"
diff --git a/src/camera.rs b/src/camera.rs
index 0832bff..ca74f81 100644
--- a/src/camera.rs
+++ b/src/camera.rs
@@ -1,3 +1,4 @@
+use indicatif::{ProgressBar, ProgressStyle};
use crate::calculus::calculus::{deg2rad, sample_square, Point3, Ray, Vec3};
use crate::common::{get_image_height, Color, DisplayBuffer, Pixel, ASPECT_RATIO, DEFOCUS_ANGLE, FOCUS_DIST, IMG_WIDTH, LOOK_AT, LOOK_FROM, MAX_DEPTH, SAMPLES_PER_PIXEL, VFOV, VUP};
use crate::calculus::Interval;
@@ -163,18 +164,31 @@ impl Camera {
}
pub fn render(&self, display_buffer: &mut DisplayBuffer, world: &HittableList) {
+ let progress_bar = ProgressBar::new(100);
+ let one_percent: u64 = ((self.image_width * self.image_height) / 100) as u64;
+ progress_bar.set_style(ProgressStyle::default_bar()
+ .template("Rendering {spinner:.green} {wide_bar} {percent}% ")
+ .unwrap()
+ .tick_chars("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ ")
+ );
+ let mut delta: u64 = 0;
(0..self.image_height).for_each(|j| {
(0..self.image_width).for_each(|i| {
- println!("Processing line {} col {}", j, i);
let mut pixel_color = Color::new(0.0, 0.0, 0.0);
(0..self.samples_per_pixel).for_each(|_| {
let r = self.get_ray(i, j);
let ray_color = self.ray_color(&r, world, self.max_depth);
pixel_color = pixel_color.add(&ray_color);
});
+ delta += 1;
+ if delta >= one_percent {
+ progress_bar.inc(1);
+ delta = 0;
+ }
pixel_color = pixel_color.mul_scalar(self.pixel_samples_scale);
display_buffer[j][i] = Pixel::from_color(&pixel_color);
})
- })
+ });
+ progress_bar.finish_with_message("Done rendering to display buffer");
}
} \ No newline at end of file