Clean up oct32norm code a bit.
This commit is contained in:
parent
3eff608493
commit
161e47fc44
|
@ -10,21 +10,19 @@
|
||||||
/// matters to the encoding process, not the length.
|
/// matters to the encoding process, not the length.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn encode(vec: (f32, f32, f32)) -> u32 {
|
pub fn encode(vec: (f32, f32, f32)) -> u32 {
|
||||||
let inv_l1_norm = 1.0f32 / (vec.0.abs() + vec.1.abs() + vec.2.abs());
|
let l1_norm = vec.0.abs() + vec.1.abs() + vec.2.abs();
|
||||||
|
let v0_norm = vec.0 / l1_norm;
|
||||||
|
let v1_norm = vec.1 / l1_norm;
|
||||||
|
|
||||||
let (u, v) = if vec.2 < 0.0 {
|
let (u, v) = if vec.2 < 0.0 {
|
||||||
(
|
(
|
||||||
u32::from(to_snorm_16(
|
u32::from(to_snorm_16((1.0 - v1_norm.abs()) * sign(vec.0))),
|
||||||
(1.0 - (vec.1 * inv_l1_norm).abs()) * sign(vec.0),
|
u32::from(to_snorm_16((1.0 - v0_norm.abs()) * sign(vec.1))),
|
||||||
)),
|
|
||||||
u32::from(to_snorm_16(
|
|
||||||
(1.0 - (vec.0 * inv_l1_norm).abs()) * sign(vec.1),
|
|
||||||
)),
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
(
|
(
|
||||||
u32::from(to_snorm_16(vec.0 * inv_l1_norm)),
|
u32::from(to_snorm_16(v0_norm)),
|
||||||
u32::from(to_snorm_16(vec.1 * inv_l1_norm)),
|
u32::from(to_snorm_16(v1_norm)),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -52,15 +50,12 @@ pub fn decode(n: u32) -> (f32, f32, f32) {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn to_snorm_16(n: f32) -> u16 {
|
fn to_snorm_16(n: f32) -> u16 {
|
||||||
(n.max(-1.0).min(1.0) * ((1u32 << (16 - 1)) - 1) as f32).round() as i16 as u16
|
(n * ((1u32 << (16 - 1)) - 1) as f32).round() as i16 as u16
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn from_snorm_16(n: u16) -> f32 {
|
fn from_snorm_16(n: u16) -> f32 {
|
||||||
f32::from(n as i16)
|
f32::from(n as i16) * (1.0f32 / ((1u32 << (16 - 1)) - 1) as f32)
|
||||||
* (1.0f32 / ((1u32 << (16 - 1)) - 1) as f32)
|
|
||||||
.max(-1.0)
|
|
||||||
.min(1.0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user