decode el valor rgb para flotar solo sin bit-shift en glsl

Actualmente estoy ocupado con sombreado diferido en webgl y necesito decodificar 3 valores enteros (en el rango [0..256] = 256 ^ 3) en un único flotante de 32 bits y codificarlo más tarde. porque esto es para WebGL, debe hacerse sin operaciones bit a bit. la precisión no es importante para mí (pero creo que se puede lograr).

esto es lo que tengo, pero creo que esto está mal debido a la precisión de la textura donde almaceno el valor codificado.

float packColor(vec3 color) {   return (color.r + (color.g*256.) + (color.b*256.*256.)) / (256.*256.*256.); }

vec3 decodeColor(float f) { 
float b = floor(f * 256.0);
float g = floor(f * 65536.0) - (b*256.);
float r = (floor(f * 16777216.0) - (b*65536.)) - (g*256.);
return vec3(r, g, b)/ 256.0;//vec3(r, g, b) / 256.0;  }

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta