Packing a [0-1] float value into a 4D vector where each component will be a 8-bits integer:
vec4 packFloatToVec4i(const float value) { const vec4 bitSh = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0); const vec4 bitMsk = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0); vec4 res = fract(value * bitSh); res -= res.xxyz * bitMsk; return res; }
Unpacking a [0-1] float value from a 4D vector where each component was a 8-bits integer:
float unpackFloatFromVec4i(const vec4 value) { const vec4 bitSh = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0); return(dot(value, bitSh)); }
Source of these codes: Gamedev forums