From 09bdaed3f5004dabd88c12800bb216ad0318e517 Mon Sep 17 00:00:00 2001 From: CDaut Date: Wed, 1 Oct 2025 11:29:24 +0200 Subject: [PATCH] refactoring --- raytracer/Cargo.lock | 35 +++++++++++++++++++++++++++++++++++ raytracer/Cargo.toml | 1 + raytracer/src/main.rs | 34 ++++++++++++---------------------- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/raytracer/Cargo.lock b/raytracer/Cargo.lock index bb02073..7379194 100644 --- a/raytracer/Cargo.lock +++ b/raytracer/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "bit_field" version = "0.10.3" @@ -20,6 +35,16 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +[[package]] +name = "cgmath" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" +dependencies = [ + "approx", + "num-traits", +] + [[package]] name = "libc" version = "0.2.176" @@ -32,6 +57,15 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + [[package]] name = "proc-macro2" version = "1.0.101" @@ -74,6 +108,7 @@ dependencies = [ name = "raytracer" version = "0.1.0" dependencies = [ + "cgmath", "libc", "log", "uefi", diff --git a/raytracer/Cargo.toml b/raytracer/Cargo.toml index b900071..2ffdce9 100644 --- a/raytracer/Cargo.toml +++ b/raytracer/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] +cgmath = "0.18.0" libc = "0.2.176" log = "0.4.28" uefi = { version = "0.35.0", features = ["logger", "panic_handler"] } diff --git a/raytracer/src/main.rs b/raytracer/src/main.rs index 6c91ce4..5b7af29 100644 --- a/raytracer/src/main.rs +++ b/raytracer/src/main.rs @@ -6,6 +6,7 @@ mod buffer; extern crate alloc; use uefi::allocator::Allocator; +use uefi::boot::ScopedProtocol; use uefi::prelude::*; use uefi::proto::console::gop::GraphicsOutput; use uefi::{boot, Result}; @@ -14,36 +15,25 @@ use crate::buffer::Buffer; #[global_allocator] static ALLOCATOR: Allocator = uefi::allocator::Allocator; - -fn clear_buffer() -> Result<()>{ - // Open graphics output protocol. +fn init_gop() -> Result> { + // Open graphics output protocol. let gop_handle = boot::get_handle_for_protocol::()?; - let mut gop = boot::open_protocol_exclusive::(gop_handle)?; + boot::open_protocol_exclusive::(gop_handle) +} + + +fn init_buffer(gop: &GraphicsOutput) -> Buffer{ // Create a buffer to draw into. let (width, height) = gop.current_mode_info().resolution(); - let mut buffer = Buffer::new(width, height); - - // Initialize the buffer with a simple gradient background. - for y in 0..height { - let r = ((y as f32) / ((height - 1) as f32)) * 255.0; - for x in 0..width { - let g = ((x as f32) / ((width - 1) as f32)) * 255.0; - let pixel = buffer.pixel(x, y).unwrap(); - pixel.red = r as u8; - pixel.green = g as u8; - pixel.blue = r as u8; - } - } - - // Draw background. - buffer.blit(&mut gop)?; - Ok(()) + Buffer::new(width, height) } #[entry] fn main() -> Status { uefi::helpers::init().unwrap(); - clear_buffer().unwrap(); + let mut gop = init_gop().unwrap(); + let buffer = init_buffer(&gop); + buffer.blit(&mut gop).unwrap(); Status::SUCCESS } \ No newline at end of file