p(gbe + b, 0, e_max); let be = clamp(bbe + b, 0, e_max); // Calculate the mantissa for each component. let rm = u32(round( select(v.r * exp2(-f32(re - b)) - 1.0, v.r * exp2(f32(b-1)), re == 0) * f32(1 << n_rg) )); let gm = u32(round( select(v.g * exp2(-f32(ge - b)) - 1.0, v.g * exp2(f32(b-1)), ge == 0) * f32(1 << n_rg) )); let bm = u32(round( select(v.b * exp2(-f32(be - b)) - 1.0, v.b * exp2(f32(b-1)), be == 0) * f32(1 << n_b) )); let red = u32(re << n_rg) | rm; let green = u32(ge << n_rg) | gm; let blue = u32(be << n_b) | bm; return (blue << 22) | (green << 11) | red; }