diff --git a/wasm-lib/src/convolutions.rs b/wasm-lib/src/convolutions.rs index f565e33..f54b70a 100644 --- a/wasm-lib/src/convolutions.rs +++ b/wasm-lib/src/convolutions.rs @@ -1,6 +1,7 @@ use crate::vec3::Vec3; use wasm_bindgen::prelude::*; + #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] @@ -8,13 +9,32 @@ extern "C" { } #[derive(Clone, PartialEq)] -pub struct Kernel { +pub struct Kernel { shape: usize, data: Vec, half_range: usize, normalize: bool } +#[wasm_bindgen] +pub struct ImageFilter { + kernel: Kernel +} + +#[wasm_bindgen] +impl ImageFilter { + #[wasm_bindgen(constructor)] + pub fn new(data: Vec, normalize: bool) -> Self { + Self { kernel: Kernel::new(data, normalize) } + } +} + +impl ImageFilter { + pub fn get_kernel(&self) -> &Kernel { + &self.kernel + } +} + impl Kernel { pub fn new(data: Vec, normalize: bool) -> Self { let shape = (data.len() as f32).sqrt().ceil() as usize; diff --git a/wasm-lib/src/scene.rs b/wasm-lib/src/scene.rs index aa1c820..eec3f31 100644 --- a/wasm-lib/src/scene.rs +++ b/wasm-lib/src/scene.rs @@ -5,6 +5,7 @@ use wasm_bindgen::prelude::*; use wasm_bindgen::Clamped; use web_sys::{CanvasRenderingContext2d, ImageData}; +use crate::convolutions::ImageFilter; use crate::convolutions::Kernel; use crate::rgb::RGB; use crate::vec3::Ray; @@ -64,6 +65,10 @@ impl Scene { } } + pub fn add_filter(&mut self, filter: ImageFilter) { + self.filters.push(filter.get_kernel().clone()); + } + pub fn add_entity(&mut self, entity: Entity) { self.entities.push(entity); }