aboutsummaryrefslogtreecommitdiff
path: root/src/camera/filter/mod.rs
blob: bfa17bbf2daa915c957963a436ec8f43cd27b7ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use crate::vector::Vector2f;
use crate::Float;

trait Eval {
    fn eval(&self, point: &Vector2f) -> Float;
}

pub struct Filter {
    eval: Box<dyn Eval>,
    pub radius: Vector2f,
}

struct BoxFilter {}

// The same a no filter, and can give aliasing in final image
impl Eval for BoxFilter {
    fn eval(&self, _: &Vector2f) -> Float {
        1.0
    }
}

impl Eval for Filter {
    fn eval(&self, point: &Vector2f) -> Float {
        self.eval.eval(point)
    }
}

impl Filter {
    fn new_box(radius: &Vector2f) -> Filter {
        Filter { radius: radius.clone(), eval: Box::new(BoxFilter {}) }
    }
}