summaryrefslogtreecommitdiff
path: root/assets/final/shaders/ray_box.wgsl
blob: d56ea1b8a99d5e7ea0f3719c6efbce8d172dbcdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct RayBounds {
    t_entry: f32,
    t_exit: f32,
    hit: bool,
};

fn ray_box_intersection(ro: vec3<f32>, rd: vec3<f32>, extent: vec3<f32>) -> RayBounds {
    let inv_rd = 1.0 / rd;
    let t0 = (-extent - ro) * inv_rd;
    let t1 = (extent - ro) * inv_rd;
    let tmin_vec = min(t0, t1);
    let tmax_vec = max(t0, t1);
    let t_entry = max(0.0, max(tmin_vec.x, max(tmin_vec.y, tmin_vec.z)));
    let t_exit = min(tmax_vec.x, min(tmax_vec.y, tmax_vec.z));
    return RayBounds(t_entry, t_exit, t_entry <= t_exit);
}