diff -ru glm/glm/gtc/packing.inl glm-aliasfix/glm/gtc/packing.inl --- glm/glm/gtc/packing.inl 2014-02-08 21:28:22.000000000 +0200 +++ glm-aliasfix/glm/gtc/packing.inl 2014-06-11 12:29:07.345452993 +0300 @@ -35,6 +35,26 @@ namespace glm{ namespace detail { + GLM_FUNC_QUALIFIER float float_from_bits_of_uint(uint const u) + { + union { + float as_float; + uint as_uint; + } result; + result.as_uint = u; + return result.as_float; + } + + GLM_FUNC_QUALIFIER glm::uint uint_from_bits_of_float(float const f) + { + union { + float as_float; + uint as_uint; + } result; + result.as_float = f; + return result.as_uint; + } + GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 const & f) { // 10 bits => EE EEEFFFFF @@ -145,7 +165,7 @@ else if(glm::isinf(x)) return 0x1f << 6; - return float2packed11(reinterpret_cast(x)); + return float2packed11(uint_from_bits_of_float(x)); } GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) @@ -158,7 +178,7 @@ return ~0;//Inf uint result = packed11ToFloat(x); - return reinterpret_cast(result); + return float_from_bits_of_uint(result); } GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) @@ -170,7 +190,7 @@ else if(glm::isinf(x)) return 0x1f << 5; - return float2packed10(reinterpret_cast(x)); + return float2packed10(uint_from_bits_of_float(x)); } GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) @@ -183,7 +203,7 @@ return ~0;//Inf uint result = packed10ToFloat(x); - return reinterpret_cast(result); + return float_from_bits_of_uint(result); } // GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z)