gloss_utils/
numerical.rs

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