unpackFloat.js 994 B

1234567891011121314151617181920212223242526
  1. //This file is automatically rebuilt by the Cesium build process.
  2. export default "/**\n\
  3. * Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4.\n\
  4. *\n\
  5. * @name czm_unpackFloat\n\
  6. * @glslFunction\n\
  7. *\n\
  8. * @param {vec4} packedFloat The packed float.\n\
  9. *\n\
  10. * @returns {float} The floating-point depth in arbitrary range.\n\
  11. */\n\
  12. float czm_unpackFloat(vec4 packedFloat)\n\
  13. {\n\
  14. // Convert to [0.0, 255.0] and round to integer\n\
  15. packedFloat = floor(packedFloat * 255.0 + 0.5);\n\
  16. float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\n\
  17. float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0; \n\
  18. if (exponent == -127.0)\n\
  19. {\n\
  20. return 0.0;\n\
  21. }\n\
  22. float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\n\
  23. float result = sign * exp2(exponent - 23.0) * mantissa;\n\
  24. return result;\n\
  25. }\n\
  26. ";