decode o valor rgb para flutuação única sem deslocamento de bit em glsl

Atualmente, estou ocupado com sombreamento diferido no webgl e preciso decodificar 3 valores inteiros (no intervalo [0..256] = 256 ^ 3) em um único float de 32 bits e codificá-lo mais tarde. porque isso é para WebGL, isso deve ser feito sem operações bit a bit. precisão não é importante para mim (mas pode ser alcançado, eu acho

isto é o que eu tenho, mas acho que isso está errado por causa da precisão da textura em que armazeno o valor codificad

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;  }

obrigado.

questionAnswers(3)

yourAnswerToTheQuestion