Browse Source

Merge branch '0.9.2' of ssh://ogl-math.git.sourceforge.net/gitroot/ogl-math/ogl-math into 0.9.2

Christophe Riccio 14 years ago
parent
commit
204a6bf612
6 changed files with 193 additions and 175 deletions
  1. 13 1
      doc/src/data.xml
  2. 1 1
      glm/core/_detail.hpp
  3. 4 4
      glm/gtc/quaternion.hpp
  4. 2 1
      glm/gtc/quaternion.inl
  5. 168 168
      glm/gtx/color_cast.inl
  6. 5 0
      readme.txt

+ 13 - 1
doc/src/data.xml

@@ -3,6 +3,7 @@
 <glm copyright="Copyright © 2005 - 2011">
 <glm copyright="Copyright © 2005 - 2011">
   <downloads>
   <downloads>
     <section name="GLM - zip files">
     <section name="GLM - zip files">
+		<download name="GLM 0.9.2.4" date="04/08/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.4/glm-0.9.2.4.zip/download"/>
 		<download name="GLM 0.9.2.3" date="08/06/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.zip/download"/>
 		<download name="GLM 0.9.2.3" date="08/06/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.zip/download"/>
 		<download name="GLM 0.9.2.2" date="02/06/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.2/glm-0.9.2.2.zip/download"/>
 		<download name="GLM 0.9.2.2" date="02/06/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.2/glm-0.9.2.2.zip/download"/>
 	  <download name="GLM 0.9.2.1" date="24/05/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.1/glm-0.9.2.1.zip/download"/>
 	  <download name="GLM 0.9.2.1" date="24/05/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.1/glm-0.9.2.1.zip/download"/>
@@ -66,6 +67,7 @@
       <download name="GLM 0.1.0.0" date="02/21/2005" size="29.2 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.1-ur.zip?download"/>
       <download name="GLM 0.1.0.0" date="02/21/2005" size="29.2 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.1-ur.zip?download"/>
     </section>
     </section>
     <section name="GLM - 7z files">
     <section name="GLM - 7z files">
+		<download name="GLM 0.9.2.4" date="04/08/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.4/glm-0.9.2.4.7z/download"/>
 		<download name="GLM 0.9.2.3" date="08/06/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.7z/download"/>
 		<download name="GLM 0.9.2.3" date="08/06/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.7z/download"/>
 		<download name="GLM 0.9.2.2" date="02/06/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.2/glm-0.9.2.2.7z/download"/>
 		<download name="GLM 0.9.2.2" date="02/06/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.2/glm-0.9.2.2.7z/download"/>
 		<download name="GLM 0.9.2.1" date="24/05/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.1/glm-0.9.2.1.7z/download"/>
 		<download name="GLM 0.9.2.1" date="24/05/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.1/glm-0.9.2.1.7z/download"/>
@@ -156,9 +158,19 @@
   </todo>
   </todo>
 
 
   <page_news>
   <page_news>
+	  <news index="0069" date="04/08/2011" title="GLM 0.9.2.4 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
+		  <paragraph>
+			  Fixed few bugs reported by GLM users. Thanks!
+		  </paragraph>
+
+		  <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.4/glm-0.9.2.4.zip/download">GLM 0.9.2.4 (zip)</source>
+		  <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.4/glm-0.9.2.4.7z/download">GLM 0.9.2.4 (7z)</source>
+		  <source type="Link" href="https://sourceforge.net/apps/trac/ogl-math/newticket">Submit a bug report</source>
+	  </news>
+	  
 	  <news index="0068" date="08/06/2011" title="GLM 0.9.2.3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
 	  <news index="0068" date="08/06/2011" title="GLM 0.9.2.3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
 		  <paragraph>
 		  <paragraph>
-			  This version only fixes a couple a major bugs introduced in GLM 0.9.2.2. 
+			  This version only fixes a couple of major bugs introduced in GLM 0.9.2.2. 
 		  </paragraph>
 		  </paragraph>
 
 
 		  <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.zip/download">GLM 0.9.2.3 (zip)</source>
 		  <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.3/glm-0.9.2.3.zip/download">GLM 0.9.2.3 (zip)</source>

+ 1 - 1
glm/core/_detail.hpp

@@ -18,7 +18,7 @@ namespace detail
 {
 {
 	class thalf;
 	class thalf;
 
 
-#if(__STDC_VERSION__ >= 199901L) // C99 detected, 64 bit types available
+#if(__STDC_VERSION__ && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
 	typedef int64_t								sint64;
 	typedef int64_t								sint64;
 	typedef uint64_t							uint64;
 	typedef uint64_t							uint64;
 #elif(GLM_COMPILER & GLM_COMPILER_VC)
 #elif(GLM_COMPILER & GLM_COMPILER_VC)

+ 4 - 4
glm/gtc/quaternion.hpp

@@ -53,7 +53,7 @@ namespace detail
 
 
 		// Convertions
 		// Convertions
 		//explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
 		//explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
-		//! pitch, yaw, roll
+		//! Build a quaternion from euler angles (pitch, yaw, roll), in radians.
 		explicit tquat(
 		explicit tquat(
 			tvec3<T> const & eulerAngles);
 			tvec3<T> const & eulerAngles);
 		explicit tquat(
 		explicit tquat(
@@ -124,8 +124,8 @@ namespace detail
 namespace gtc{
 namespace gtc{
 namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and functions
 namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and functions
 {
 {
-	/// \addtogroup gtc_quaternion
-	///@{
+	/// @addtogroup gtc_quaternion
+	/// @{
 
 
 	//! Returns the length of the quaternion. 
 	//! Returns the length of the quaternion. 
 	//! From GLM_GTC_quaternion extension.
 	//! From GLM_GTC_quaternion extension.
@@ -232,7 +232,7 @@ namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and fun
 	//! Quaternion of high precision floating-point numbers. 
 	//! Quaternion of high precision floating-point numbers. 
 	//! From GLM_GTC_quaternion extension.
 	//! From GLM_GTC_quaternion extension.
 	typedef detail::tquat<highp_float>		highp_quat;
 	typedef detail::tquat<highp_float>		highp_quat;
-	///@}
+	/// @}
 
 
 } //namespace quaternion
 } //namespace quaternion
 } //namespace gtc
 } //namespace gtc

+ 2 - 1
glm/gtc/quaternion.inl

@@ -474,7 +474,8 @@ namespace quaternion{
         typename detail::tquat<T>::value_type AngleRad = radians(angle);
         typename detail::tquat<T>::value_type AngleRad = radians(angle);
         typename detail::tquat<T>::value_type fSin = sin(AngleRad * T(0.5));
         typename detail::tquat<T>::value_type fSin = sin(AngleRad * T(0.5));
 
 
-        return gtc::quaternion::cross(q, detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
+		return q * detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin);
+        //return gtc::quaternion::cross(q, detail::tquat<T>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
 	}
 	}
 
 
     template <typename T> 
     template <typename T> 

+ 168 - 168
glm/gtx/color_cast.inl

@@ -204,9 +204,9 @@ template <>
 GLM_FUNC_QUALIFIER gtc::type_precision::f16vec3 f16_rgbx_cast<gtc::type_precision::uint32>(gtc::type_precision::uint32 color)
 GLM_FUNC_QUALIFIER gtc::type_precision::f16vec3 f16_rgbx_cast<gtc::type_precision::uint32>(gtc::type_precision::uint32 color)
 {
 {
 	gtc::type_precision::f16vec3 result;
 	gtc::type_precision::f16vec3 result;
-	result.x = gtc::type_precision::f16(static_cast<float>(color >>  0) / static_cast<float>(255));
-	result.y = gtc::type_precision::f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.z = gtc::type_precision::f16(static_cast<float>(color >> 16) / static_cast<float>(255));
+	result.x = gtc::type_precision::f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
+	result.y = gtc::type_precision::f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.z = gtc::type_precision::f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -214,9 +214,9 @@ template <>
 GLM_FUNC_QUALIFIER gtc::type_precision::f16vec3 f16_xrgb_cast<gtc::type_precision::uint32>(gtc::type_precision::uint32 color)
 GLM_FUNC_QUALIFIER gtc::type_precision::f16vec3 f16_xrgb_cast<gtc::type_precision::uint32>(gtc::type_precision::uint32 color)
 {
 {
 	gtc::type_precision::f16vec3 result;
 	gtc::type_precision::f16vec3 result;
-	result.x = gtc::type_precision::f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.y = gtc::type_precision::f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.z = gtc::type_precision::f16(static_cast<float>(color >> 24) / static_cast<float>(255));
+	result.x = gtc::type_precision::f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.y = gtc::type_precision::f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.z = gtc::type_precision::f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -224,9 +224,9 @@ template <>
 GLM_FUNC_QUALIFIER f16vec3 f16_bgrx_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec3 f16_bgrx_cast<uint32>(uint32 color)
 {
 {
 	f16vec3 result;
 	f16vec3 result;
-	result.x = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >>  0) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -234,9 +234,9 @@ template <>
 GLM_FUNC_QUALIFIER f16vec3 f16_xbgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec3 f16_xbgr_cast<uint32>(uint32 color)
 {
 {
 	f16vec3 result;
 	f16vec3 result;
-	result.x = f16(static_cast<float>(color >> 24) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -244,10 +244,10 @@ template <>
 GLM_FUNC_QUALIFIER f16vec4 f16_rgba_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec4 f16_rgba_cast<uint32>(uint32 color)
 {
 {
 	f16vec4 result;
 	f16vec4 result;
-	result.x = f16(static_cast<float>(color >>  0) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.w = f16(static_cast<float>(color >> 24) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.w = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -255,10 +255,10 @@ template <>
 GLM_FUNC_QUALIFIER f16vec4 f16_argb_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec4 f16_argb_cast<uint32>(uint32 color)
 {
 {
 	f16vec4 result;
 	f16vec4 result;
-	result.x = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >> 24) / static_cast<float>(255));
-	result.w = f16(static_cast<float>(color >>  0) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+	result.w = f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -266,10 +266,10 @@ template <>
 GLM_FUNC_QUALIFIER f16vec4 f16_bgra_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec4 f16_bgra_cast<uint32>(uint32 color)
 {
 {
 	f16vec4 result;
 	f16vec4 result;
-	result.x = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >>  0) / static_cast<float>(255));
-	result.w = f16(static_cast<float>(color >> 24) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
+	result.w = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -277,10 +277,10 @@ template <>
 GLM_FUNC_QUALIFIER f16vec4 f16_abgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER f16vec4 f16_abgr_cast<uint32>(uint32 color)
 {
 {
 	f16vec4 result;
 	f16vec4 result;
-	result.x = f16(static_cast<float>(color >> 24) / static_cast<float>(255));
-	result.y = f16(static_cast<float>(color >> 16) / static_cast<float>(255));
-	result.z = f16(static_cast<float>(color >>  8) / static_cast<float>(255));
-	result.w = f16(static_cast<float>(color >>  0) / static_cast<float>(255));
+	result.x = f16(static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255));
+	result.y = f16(static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255));
+	result.z = f16(static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255));
+	result.w = f16(static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255));
 	return result;
 	return result;
 }
 }
 
 
@@ -294,9 +294,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >>  0) / static_cast<float>(255);
-	result.y = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.z = static_cast<float>(color >> 16) / static_cast<float>(255);
+	result.x = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -304,9 +304,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.z = static_cast<float>(color >> 24) / static_cast<float>(255);
+	result.x = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -314,9 +314,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.y = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.z = static_cast<float>(color >>  0) / static_cast<float>(255);
+	result.x = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -324,9 +324,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >> 24) / static_cast<float>(255);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.z = static_cast<float>(color >>  8) / static_cast<float>(255);
+	result.x = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -334,10 +334,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >>  0) / static_cast<float>(255);
-	result.y = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.z = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.w = static_cast<float>(color >> 24) / static_cast<float>(255);
+	result.x = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.w = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -345,10 +345,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.z = static_cast<float>(color >> 24) / static_cast<float>(255);
-	result.w = static_cast<float>(color >>  0) / static_cast<float>(255);
+	result.x = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+	result.w = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -356,10 +356,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.y = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.z = static_cast<float>(color >>  0) / static_cast<float>(255);
-	result.w = static_cast<float>(color >> 24) / static_cast<float>(255);
+	result.x = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
+	result.w = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -367,10 +367,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >> 24) / static_cast<float>(255);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(255);
-	result.z = static_cast<float>(color >>  8) / static_cast<float>(255);
-	result.w = static_cast<float>(color >>  0) / static_cast<float>(255);
+	result.x = static_cast<float>((color >> 24) & 0xFF) / static_cast<float>(255);
+	result.y = static_cast<float>((color >> 16) & 0xFF) / static_cast<float>(255);
+	result.z = static_cast<float>((color >>  8) & 0xFF) / static_cast<float>(255);
+	result.w = static_cast<float>((color >>  0) & 0xFF) / static_cast<float>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -384,9 +384,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >>  0) / static_cast<double>(255);
-	result.y = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.z = static_cast<double>(color >> 16) / static_cast<double>(255);
+	result.x = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -394,9 +394,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.z = static_cast<double>(color >> 24) / static_cast<double>(255);
+	result.x = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -404,9 +404,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.y = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.z = static_cast<double>(color >>  0) / static_cast<double>(255);
+	result.x = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -414,9 +414,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >> 24) / static_cast<double>(255);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.z = static_cast<double>(color >>  8) / static_cast<double>(255);
+	result.x = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -424,10 +424,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >>  0) / static_cast<double>(255);
-	result.y = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.z = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.w = static_cast<double>(color >> 24) / static_cast<double>(255);
+	result.x = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.w = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -435,10 +435,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.z = static_cast<double>(color >> 24) / static_cast<double>(255);
-	result.w = static_cast<double>(color >>  0) / static_cast<double>(255);
+	result.x = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+	result.w = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -446,10 +446,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.y = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.z = static_cast<double>(color >>  0) / static_cast<double>(255);
-	result.w = static_cast<double>(color >> 24) / static_cast<double>(255);
+	result.x = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
+	result.w = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -457,10 +457,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint32>(uint32 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint32>(uint32 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >> 24) / static_cast<double>(255);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(255);
-	result.z = static_cast<double>(color >>  8) / static_cast<double>(255);
-	result.w = static_cast<double>(color >>  0) / static_cast<double>(255);
+	result.x = static_cast<double>((color >> 24) & 0xFF) / static_cast<double>(255);
+	result.y = static_cast<double>((color >> 16) & 0xFF) / static_cast<double>(255);
+	result.z = static_cast<double>((color >>  8) & 0xFF) / static_cast<double>(255);
+	result.w = static_cast<double>((color >>  0) & 0xFF) / static_cast<double>(255);
 	return result;
 	return result;
 }
 }
 
 
@@ -474,9 +474,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_rgbx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_rgbx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<detail::thalf> result;
 	detail::tvec3<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -484,9 +484,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_xrgb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_xrgb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<detail::thalf> result;
 	detail::tvec3<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -494,9 +494,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_bgrx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_bgrx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<detail::thalf> result;
 	detail::tvec3<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -504,9 +504,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_xbgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<detail::thalf> f16_xbgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<detail::thalf> result;
 	detail::tvec3<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -514,10 +514,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_rgba_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_rgba_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<detail::thalf> result;
 	detail::tvec4<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.w = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.w = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -525,10 +525,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_argb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_argb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<detail::thalf> result;
 	detail::tvec4<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
-	result.w = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+	result.w = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -536,10 +536,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_bgra_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_bgra_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<detail::thalf> result;
 	detail::tvec4<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
-	result.w = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
+	result.w = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -547,10 +547,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_abgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<detail::thalf> f16_abgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<detail::thalf> result;
 	detail::tvec4<detail::thalf> result;
-	result.x = detail::thalf(static_cast<float>(color >> 48) / static_cast<float>(65535));
-	result.y = detail::thalf(static_cast<float>(color >> 32) / static_cast<float>(65535));
-	result.z = detail::thalf(static_cast<float>(color >> 16) / static_cast<float>(65535));
-	result.w = detail::thalf(static_cast<float>(color >>  0) / static_cast<float>(65535));
+	result.x = detail::thalf(static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535));
+	result.y = detail::thalf(static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535));
+	result.z = detail::thalf(static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535));
+	result.w = detail::thalf(static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535));
 	return result;
 	return result;
 }
 }
 
 
@@ -564,9 +564,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_rgbx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >>  0) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 32) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -574,9 +574,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xrgb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 48) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -584,9 +584,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_bgrx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >>  0) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -594,9 +594,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<float> f32_xbgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<float> result;
 	detail::tvec3<float> result;
-	result.x = static_cast<float>(color >> 48) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 16) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -604,10 +604,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_rgba_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >>  0) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.w = static_cast<float>(color >> 48) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.w = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -615,10 +615,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_argb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 48) / static_cast<float>(65535);
-	result.w = static_cast<float>(color >>  0) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+	result.w = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -626,10 +626,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_bgra_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >>  0) / static_cast<float>(65535);
-	result.w = static_cast<float>(color >> 48) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
+	result.w = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -637,10 +637,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<float> f32_abgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<float> result;
 	detail::tvec4<float> result;
-	result.x = static_cast<float>(color >> 48) / static_cast<float>(65535);
-	result.y = static_cast<float>(color >> 32) / static_cast<float>(65535);
-	result.z = static_cast<float>(color >> 16) / static_cast<float>(65535);
-	result.w = static_cast<float>(color >>  0) / static_cast<float>(65535);
+	result.x = static_cast<float>((color >> 48) & 0xFFFF) / static_cast<float>(65535);
+	result.y = static_cast<float>((color >> 32) & 0xFFFF) / static_cast<float>(65535);
+	result.z = static_cast<float>((color >> 16) & 0xFFFF) / static_cast<float>(65535);
+	result.w = static_cast<float>((color >>  0) & 0xFFFF) / static_cast<float>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -654,9 +654,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_rgbx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >>  0) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 32) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -664,9 +664,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xrgb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 48) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -674,9 +674,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_bgrx_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >>  0) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -684,9 +684,9 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec3<double> f64_xbgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec3<double> result;
 	detail::tvec3<double> result;
-	result.x = static_cast<double>(color >> 48) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 16) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -694,10 +694,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_rgba_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >>  0) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.w = static_cast<double>(color >> 48) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.w = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -705,10 +705,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_argb_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 48) / static_cast<double>(65535);
-	result.w = static_cast<double>(color >>  0) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+	result.w = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -716,10 +716,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_bgra_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >>  0) / static_cast<double>(65535);
-	result.w = static_cast<double>(color >> 48) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
+	result.w = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 
@@ -727,10 +727,10 @@ template <>
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint64>(uint64 color)
 GLM_FUNC_QUALIFIER detail::tvec4<double> f64_abgr_cast<uint64>(uint64 color)
 {
 {
 	detail::tvec4<double> result;
 	detail::tvec4<double> result;
-	result.x = static_cast<double>(color >> 48) / static_cast<double>(65535);
-	result.y = static_cast<double>(color >> 32) / static_cast<double>(65535);
-	result.z = static_cast<double>(color >> 16) / static_cast<double>(65535);
-	result.w = static_cast<double>(color >>  0) / static_cast<double>(65535);
+	result.x = static_cast<double>((color >> 48) & 0xFFFF) / static_cast<double>(65535);
+	result.y = static_cast<double>((color >> 32) & 0xFFFF) / static_cast<double>(65535);
+	result.z = static_cast<double>((color >> 16) & 0xFFFF) / static_cast<double>(65535);
+	result.w = static_cast<double>((color >>  0) & 0xFFFF) / static_cast<double>(65535);
 	return result;
 	return result;
 }
 }
 
 

+ 5 - 0
readme.txt

@@ -36,6 +36,11 @@ GLM is a header only library, there is nothing to build, just include it.
 More informations in GLM manual:
 More informations in GLM manual:
 http://glm.g-truc.net/glm-0.9.2.pdf
 http://glm.g-truc.net/glm-0.9.2.pdf
 
 
+================================================================================
+GLM 0.9.2.4: 2011-08-04
+--------------------------------------------------------------------------------
+- Fixed extensions bugs
+
 ================================================================================
 ================================================================================
 GLM 0.9.2.3: 2011-06-08
 GLM 0.9.2.3: 2011-06-08
 --------------------------------------------------------------------------------
 --------------------------------------------------------------------------------