From a89ce343dce62d31fd8dcfe3c1dbec1425423f44 Mon Sep 17 00:00:00 2001 From: Rosyid Haryadi Date: Tue, 4 Mar 2025 00:24:58 +0700 Subject: upd progress bar because it's cool --- Cargo.toml | 1 + src/camera.rs | 18 ++++++++++++++++-- 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 -- cgit v1.2.3-70-g09d2