float4 pack(float f, int iRange) { float4 fReturn = 0.0f; float fRange = iRange * 1.0f; int i = (int) (f * iRange); fReturn.r = i / fRange; f = (f - fReturn.r) * fRange; i = (int) (f * iRange); fReturn.g = i / fRange; f = (f - fReturn.g) * fRange; i = (int) (f * iRange); fReturn.b = i / fRange; fReturn.a = 0.0f; return fReturn; } float unpack(float4 f, int iRange) { float fRange = iRange * 1.0f; return f.r + f.g / fRange + f.b / (fRange * fRange); }