gloss_utils/
numerical.rs

1pub fn align(size: u32, alignment: u32) -> u32 {
2    ((size + alignment - 1) / alignment) * alignment
3}
4
5pub fn align_usz(size: usize, alignment: usize) -> usize {
6    ((size + alignment - 1) / alignment) * alignment
7}
8
9// https://iolite-engine.com/blog_posts/reverse_z_cheatsheet
10//transforms a reverse-z depth buffer to linear depth
11pub fn linearize_depth_reverse_z(d: f32, near: f32, far: f32) -> f32 {
12    if d <= 0.0 {
13        0.0
14    } else {
15        (near * far) / (d * (far - near) + near)
16    }
17}
18
19//https://stackoverflow.com/a/77388975
20pub fn u8_to_f32_vec(v: &[u8]) -> Vec<f32> {
21    v.chunks_exact(4)
22        .map(TryInto::try_into)
23        .map(Result::unwrap)
24        .map(f32::from_le_bytes)
25        .collect()
26}