summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs65
1 files changed, 8 insertions, 57 deletions
diff --git a/src/main.rs b/src/main.rs
index f81c5a7..36af9b0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,72 +1,23 @@
-use std::fs::File;
-use std::io::Write;
-
-const IMG_WIDTH: usize = 256;
-const IMG_HEIGHT: usize = 256;
-
-type DisplayBuffer = [[Pixel; IMG_WIDTH]; IMG_HEIGHT];
-
-#[derive(Debug, Copy, Clone)]
-struct Pixel {
- r: u8,
- g: u8,
- b: u8,
-}
-
-impl Default for Pixel {
- fn default() -> Self {
- Pixel { r:0, g:0, b:0 }
- }
-}
+mod view;
+mod global;
-struct View<'a> {
- data: &'a DisplayBuffer,
- viewer: fn(&DisplayBuffer) -> Result<String, std::io::Error>,
-}
-
-impl<'a> View<'a> {
- fn display(&self) {
- let result = (self.viewer)(self.data);
- match result {
- Ok(success_msg) => {
- println!("{}", success_msg);
- },
- Err(error_msg) => {
- eprintln!("{}", error_msg);
- }
- }
- }
-}
-
-fn ppm_exporter(data: &DisplayBuffer) -> Result<String, std::io::Error> {
- let file_name = "output.ppm";
- let mut file = File::create(file_name)?;
- // header
- let mut txt_data = String::from("P3\n");
- txt_data.push_str(format!("{} {}\n255\n", IMG_WIDTH, IMG_HEIGHT).as_str());
- // data point
- data.iter().for_each(|row| {
- row.iter().for_each(|&pixel| {
- txt_data.push_str(&format!("{} {} {}\n", pixel.r, pixel.g, pixel.b));
- })
- });
- file.write_all(txt_data.as_bytes())?;
- Ok(format!("Output rendered to file {}", file_name))
-}
+use crate::global::*;
+use crate::view::{View, render_viewer};
+use std::io::Write;
fn main() {
let mut data: DisplayBuffer = [[Pixel::default(); IMG_WIDTH]; IMG_HEIGHT];
- render_gradient(&mut data);
+ test_render(&mut data);
let view = View {
data: &data,
- viewer: ppm_exporter,
+ viewer: render_viewer::ppm_exporter,
};
view.display();
}
-fn render_gradient(data: &mut DisplayBuffer) {
+fn test_render(data: &mut DisplayBuffer) {
(0..IMG_HEIGHT).for_each(|j| {
(0..IMG_WIDTH).for_each(|i| {
let r = i as f32 / IMG_WIDTH as f32;