Browse Source

Added possible static_cast conversion of GLM types (#72)

Christophe Riccio 12 years ago
parent
commit
d252dd243b

+ 1 - 5
glm/detail/type_mat2x2.hpp

@@ -92,15 +92,11 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U> 
-		GLM_FUNC_DECL explicit tmat2x2(
-			U const & x);
-
 		template <typename U, typename V, typename M, typename N>
 		template <typename U, typename V, typename M, typename N>
 		GLM_FUNC_DECL explicit tmat2x2(
 		GLM_FUNC_DECL explicit tmat2x2(
 			U const & x1, V const & y1,
 			U const & x1, V const & y1,
 			M const & x2, N const & y2);
 			M const & x2, N const & y2);
-			
+
 		template <typename U, typename V>
 		template <typename U, typename V>
 		GLM_FUNC_DECL explicit tmat2x2(
 		GLM_FUNC_DECL explicit tmat2x2(
 			tvec2<U, P> const & v1,
 			tvec2<U, P> const & v1,

+ 0 - 12
glm/detail/type_mat2x2.inl

@@ -154,18 +154,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec2<T, P>(static_cast<T>(s), Zero);
-		this->value[1] = tvec2<T, P>(Zero, value_type(s));
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <typename X1, typename Y1, typename X2, typename Y2>
 	template <typename X1, typename Y1, typename X2, typename Y2>
 	GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
 	GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2

+ 0 - 4
glm/detail/type_mat2x3.hpp

@@ -82,10 +82,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat2x3(
-			U const & x);
-			
 		template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
 		template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
 		GLM_FUNC_DECL explicit tmat2x3(
 		GLM_FUNC_DECL explicit tmat2x3(
 			X1 const & x1, Y1 const & y1, Z1 const & z1,
 			X1 const & x1, Y1 const & y1, Z1 const & z1,

+ 2 - 14
glm/detail/type_mat2x3.inl

@@ -153,18 +153,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec3<T, P>(static_cast<T>(s), Zero, Zero);
-		this->value[1] = tvec3<T, P>(Zero, value_type(s), Zero);
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1, typename Z1,
 		typename X1, typename Y1, typename Z1,
@@ -173,7 +161,7 @@ namespace detail
 	(
 	(
 		X1 const & x1, Y1 const & y1, Z1 const & z1,
 		X1 const & x1, Y1 const & y1, Z1 const & z1,
 		X2 const & x2, Y2 const & y2, Z2 const & z2
 		X2 const & x2, Y2 const & y2, Z2 const & z2
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
@@ -185,7 +173,7 @@ namespace detail
 	(
 	(
 		tvec3<V1, P> const & v1,
 		tvec3<V1, P> const & v1,
 		tvec3<V2, P> const & v2
 		tvec3<V2, P> const & v2
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(v1);
 		this->value[0] = col_type(v1);
 		this->value[1] = col_type(v2);
 		this->value[1] = col_type(v2);

+ 0 - 4
glm/detail/type_mat2x4.hpp

@@ -82,10 +82,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat2x4(
-			U const & x);
-			
 		template <
 		template <
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X2, typename Y2, typename Z2, typename W2>
 			typename X2, typename Y2, typename Z2, typename W2>

+ 2 - 14
glm/detail/type_mat2x4.inl

@@ -156,18 +156,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec4<T, P>(static_cast<T>(s), Zero, Zero, Zero);
-		this->value[1] = tvec4<T, P>(Zero, value_type(s), Zero, Zero);
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1, typename Z1, typename W1,
 		typename X1, typename Y1, typename Z1, typename W1,
@@ -176,7 +164,7 @@ namespace detail
 	(
 	(
 		X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
 		X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
 		X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2
 		X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1));
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2));
@@ -188,7 +176,7 @@ namespace detail
 	(
 	(
 		tvec4<V1, P> const & v1,
 		tvec4<V1, P> const & v1,
 		tvec4<V2, P> const & v2
 		tvec4<V2, P> const & v2
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(v1);
 		this->value[0] = col_type(v1);
 		this->value[1] = col_type(v2);
 		this->value[1] = col_type(v2);

+ 0 - 4
glm/detail/type_mat3x2.hpp

@@ -84,10 +84,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat3x2(
-			U const & x);
-			
 		template<
 		template<
 			typename X1, typename Y1,
 			typename X1, typename Y1,
 			typename X2, typename Y2,
 			typename X2, typename Y2,

+ 3 - 16
glm/detail/type_mat3x2.inl

@@ -163,19 +163,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec2<T, P>(static_cast<T>(s), Zero);
-		this->value[1] = tvec2<T, P>(Zero, value_type(s));
-		this->value[2] = tvec2<T, P>(Zero);
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1,
 		typename X1, typename Y1,
@@ -186,13 +173,13 @@ namespace detail
 		X1 const & x1, Y1 const & y1,
 		X1 const & x1, Y1 const & y1,
 		X2 const & x2, Y2 const & y2,
 		X2 const & x2, Y2 const & y2,
 		X3 const & x3, Y3 const & y3
 		X3 const & x3, Y3 const & y3
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
 		this->value[2] = col_type(static_cast<T>(x3), value_type(y3));
 		this->value[2] = col_type(static_cast<T>(x3), value_type(y3));
 	}
 	}
-	
+
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <typename V1, typename V2, typename V3>
 	template <typename V1, typename V2, typename V3>
 	GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
 	GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
@@ -200,7 +187,7 @@ namespace detail
 		tvec2<V1, P> const & v1,
 		tvec2<V1, P> const & v1,
 		tvec2<V2, P> const & v2,
 		tvec2<V2, P> const & v2,
 		tvec2<V3, P> const & v3
 		tvec2<V3, P> const & v3
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(v1);
 		this->value[0] = col_type(v1);
 		this->value[1] = col_type(v2);
 		this->value[1] = col_type(v2);

+ 0 - 4
glm/detail/type_mat3x3.hpp

@@ -93,10 +93,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat3x3(
-			U const & x);
-			
 		template<
 		template<
 			typename X1, typename Y1, typename Z1,
 			typename X1, typename Y1, typename Z1,
 			typename X2, typename Y2, typename Z2,
 			typename X2, typename Y2, typename Z2,

+ 0 - 13
glm/detail/type_mat3x3.inl

@@ -166,19 +166,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec3<T, P>(static_cast<T>(s), Zero, Zero);
-		this->value[1] = tvec3<T, P>(Zero, value_type(s), Zero);
-		this->value[2] = tvec3<T, P>(Zero, Zero, value_type(s));
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1, typename Z1,
 		typename X1, typename Y1, typename Z1,

+ 0 - 4
glm/detail/type_mat3x4.hpp

@@ -84,10 +84,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat3x4(
-			U const & x);
-			
 		template<
 		template<
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X2, typename Y2, typename Z2, typename W2,
 			typename X2, typename Y2, typename Z2, typename W2,

+ 0 - 13
glm/detail/type_mat3x4.inl

@@ -139,19 +139,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec4<T, P>(static_cast<T>(s), Zero, Zero, Zero);
-		this->value[1] = tvec4<T, P>(Zero, value_type(s), Zero, Zero);
-		this->value[2] = tvec4<T, P>(Zero, Zero, value_type(s), Zero);
-	}
-	
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1, typename Z1, typename W1,
 		typename X1, typename Y1, typename Z1, typename W1,

+ 3 - 6
glm/detail/type_mat4x2.hpp

@@ -86,10 +86,7 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U> 
-		GLM_FUNC_DECL explicit tmat4x2(
-			U const & x);
-			
+
 		template<
 		template<
 			typename X1, typename Y1,
 			typename X1, typename Y1,
 			typename X2, typename Y2,
 			typename X2, typename Y2,
@@ -100,7 +97,7 @@ namespace detail
 			X2 const & x2, Y2 const & y2,
 			X2 const & x2, Y2 const & y2,
 			X3 const & x3, Y3 const & y3,
 			X3 const & x3, Y3 const & y3,
 			X4 const & x4, Y4 const & y4);
 			X4 const & x4, Y4 const & y4);
-			
+
 		template <typename V1, typename V2, typename V3, typename V4>
 		template <typename V1, typename V2, typename V3, typename V4>
 		GLM_FUNC_DECL explicit tmat4x2(
 		GLM_FUNC_DECL explicit tmat4x2(
 			tvec2<V1, P> const & v1,
 			tvec2<V1, P> const & v1,
@@ -111,7 +108,7 @@ namespace detail
 		// Matrix conversions
 		// Matrix conversions
 		template <typename U, precision Q>
 		template <typename U, precision Q>
 		GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
 		GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
-			
+
 		GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
 		GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
 		GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
 		GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
 		GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);
 		GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);

+ 3 - 16
glm/detail/type_mat4x2.inl

@@ -144,20 +144,7 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec2<T, P>(static_cast<T>(s), Zero);
-		this->value[1] = tvec2<T, P>(Zero, value_type(s));
-		this->value[2] = tvec2<T, P>(Zero, Zero);
-		this->value[3] = tvec2<T, P>(Zero, Zero);
-	}
-	
+
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <
 	template <
 		typename X1, typename Y1,
 		typename X1, typename Y1,
@@ -170,7 +157,7 @@ namespace detail
 		X2 const & x2, Y2 const & y2,
 		X2 const & x2, Y2 const & y2,
 		X3 const & x3, Y3 const & y3,
 		X3 const & x3, Y3 const & y3,
 		X4 const & x4, Y4 const & y4
 		X4 const & x4, Y4 const & y4
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
@@ -186,7 +173,7 @@ namespace detail
 		tvec2<V2, P> const & v2,
 		tvec2<V2, P> const & v2,
 		tvec2<V3, P> const & v3,
 		tvec2<V3, P> const & v3,
 		tvec2<V4, P> const & v4
 		tvec2<V4, P> const & v4
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(v1);
 		this->value[0] = col_type(v1);
 		this->value[1] = col_type(v2);
 		this->value[1] = col_type(v2);

+ 0 - 3
glm/detail/type_mat4x3.hpp

@@ -86,9 +86,6 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U>
-		GLM_FUNC_DECL explicit tmat4x3(
-			U const & x);
 
 
 		template <
 		template <
 			typename X1, typename Y1, typename Z1,
 			typename X1, typename Y1, typename Z1,

+ 2 - 15
glm/detail/type_mat4x3.inl

@@ -169,20 +169,7 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P> 
-	template <typename U> 
-	GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3
-	(
-		U const & s
-	)
-	{
-		value_type const Zero(0);
-		this->value[0] = tvec3<T, P>(static_cast<T>(s), Zero, Zero);
-		this->value[1] = tvec3<T, P>(Zero, value_type(s), Zero);
-		this->value[2] = tvec3<T, P>(Zero, Zero, value_type(s));
-		this->value[3] = tvec3<T, P>(Zero, Zero, Zero);
-	}
-	
+
 	template <typename T, precision P> 
 	template <typename T, precision P> 
 	template <
 	template <
 		typename X1, typename Y1, typename Z1,
 		typename X1, typename Y1, typename Z1,
@@ -195,7 +182,7 @@ namespace detail
 		X2 const & x2, Y2 const & y2, Z2 const & z2,
 		X2 const & x2, Y2 const & y2, Z2 const & z2,
 		X3 const & x3, Y3 const & y3, Z3 const & z3,
 		X3 const & x3, Y3 const & y3, Z3 const & z3,
 		X4 const & x4, Y4 const & y4, Z4 const & z4
 		X4 const & x4, Y4 const & y4, Z4 const & z4
-	)		
+	)
 	{
 	{
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
 		this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
 		this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));

+ 1 - 4
glm/detail/type_mat4x4.hpp

@@ -99,10 +99,7 @@ namespace detail
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversions
 		// Conversions
-		template <typename U> 
-		GLM_FUNC_DECL explicit tmat4x4(
-			U const & x);
-			
+
 		template <
 		template <
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X1, typename Y1, typename Z1, typename W1,
 			typename X2, typename Y2, typename Z2, typename W2,
 			typename X2, typename Y2, typename Z2, typename W2,

+ 0 - 16
glm/detail/type_mat4x4.inl

@@ -191,22 +191,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion constructors
 	// Conversion constructors
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
-	(
-		U const & s
-	)
-	{
-		GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || std::numeric_limits<U>::is_integer, "*mat4x4 constructor only takes float and integer types");
-
-		value_type const Zero(0);
-		this->value[0] = tvec4<T, P>(static_cast<T>(s), Zero, Zero, Zero);
-		this->value[1] = tvec4<T, P>(Zero, value_type(s), Zero, Zero);
-		this->value[2] = tvec4<T, P>(Zero, Zero, value_type(s), Zero);
-		this->value[3] = tvec4<T, P>(Zero, Zero, Zero, value_type(s));
-	}
-	
 	template <typename T, precision P> 
 	template <typename T, precision P> 
 	template <
 	template <
 		typename X1, typename Y1, typename Z1, typename W1,
 		typename X1, typename Y1, typename Z1, typename W1,

+ 0 - 4
glm/detail/type_vec2.hpp

@@ -137,10 +137,6 @@ namespace detail
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversion constructors
 		// Conversion constructors
 
 
-		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-		template <typename U>
-		GLM_FUNC_DECL explicit tvec2(
-			U const & x);
 		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		template <typename U, typename V>
 		template <typename U, typename V>
 		GLM_FUNC_DECL explicit tvec2(
 		GLM_FUNC_DECL explicit tvec2(

+ 0 - 10
glm/detail/type_vec2.inl

@@ -110,16 +110,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion scalar constructors
 	// Conversion scalar constructors
-		
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tvec2<T, P>::tvec2
-	(
-		U const & x
-	) :
-		x(static_cast<T>(x)),
-		y(static_cast<T>(x))
-	{}
 
 
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <typename U, typename V>
 	template <typename U, typename V>

+ 1 - 5
glm/detail/type_vec3.hpp

@@ -128,16 +128,12 @@ namespace detail
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversion scalar constructors
 		// Conversion scalar constructors
 
 
-		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-		template <typename U>
-		GLM_FUNC_DECL explicit tvec3(
-			U const & x);
 		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		//! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		template <typename U, typename V, typename W>
 		template <typename U, typename V, typename W>
 		GLM_FUNC_DECL explicit tvec3(
 		GLM_FUNC_DECL explicit tvec3(
 			U const & x,
 			U const & x,
 			V const & y,
 			V const & y,
-			W const & z);			
+			W const & z);
 
 
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversion vector constructors
 		// Conversion vector constructors

+ 0 - 11
glm/detail/type_vec3.inl

@@ -117,17 +117,6 @@ namespace detail
 
 
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion scalar constructors
 	// Conversion scalar constructors
-		
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tvec3<T, P>::tvec3
-	(
-		U const & s
-	) :
-		x(static_cast<T>(s)),
-		y(static_cast<T>(s)),
-		z(static_cast<T>(s))
-	{}
 
 
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <typename A, typename B, typename C>
 	template <typename A, typename B, typename C>

+ 0 - 4
glm/detail/type_vec4.hpp

@@ -131,10 +131,6 @@ namespace detail
 		//////////////////////////////////////
 		//////////////////////////////////////
 		// Conversion scalar constructors
 		// Conversion scalar constructors
 
 
-		/// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
-		template <typename U>
-		GLM_FUNC_DECL explicit tvec4(
-			U const & x);
 		/// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		/// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
 		template <typename A, typename B, typename C, typename D>
 		template <typename A, typename B, typename C, typename D>
 		GLM_FUNC_DECL explicit tvec4(
 		GLM_FUNC_DECL explicit tvec4(

+ 0 - 12
glm/detail/type_vec4.inl

@@ -125,18 +125,6 @@ namespace detail
 	//////////////////////////////////////
 	//////////////////////////////////////
 	// Conversion scalar constructors
 	// Conversion scalar constructors
 
 
-	template <typename T, precision P>
-	template <typename U>
-	GLM_FUNC_QUALIFIER tvec4<T, P>::tvec4
-	(
-		U const & x
-	) :
-		x(static_cast<T>(x)),
-		y(static_cast<T>(x)),
-		z(static_cast<T>(x)),
-		w(static_cast<T>(x))
-	{}
-
 	template <typename T, precision P>
 	template <typename T, precision P>
 	template <typename A, typename B, typename C, typename D>
 	template <typename A, typename B, typename C, typename D>
 	GLM_FUNC_QUALIFIER tvec4<T, P>::tvec4
 	GLM_FUNC_QUALIFIER tvec4<T, P>::tvec4

+ 2 - 1
readme.txt

@@ -40,7 +40,8 @@ http://glm.g-truc.net/glm.pdf
 GLM 0.9.5.1: 2014-XX-XX
 GLM 0.9.5.1: 2014-XX-XX
 --------------------------------------------------------------------------------
 --------------------------------------------------------------------------------
 - Fixed angle and orientedAngle that sometimes return NaN values (#145)
 - Fixed angle and orientedAngle that sometimes return NaN values (#145)
-- Deprecated degrees for function parameters and display a message.
+- Deprecated degrees for function parameters and display a message
+- Added possible static_cast conversion of GLM types (#72)
 
 
 ================================================================================
 ================================================================================
 GLM 0.9.5.0: 2013-12-25
 GLM 0.9.5.0: 2013-12-25

+ 3 - 2
test/core/core_type_cast.cpp

@@ -27,8 +27,9 @@ int test_vec2_cast()
 	glm::mediump_vec2 G = static_cast<glm::mediump_vec2>(A);
 	glm::mediump_vec2 G = static_cast<glm::mediump_vec2>(A);
 	glm::highp_vec2 H = static_cast<glm::highp_vec2>(A);
 	glm::highp_vec2 H = static_cast<glm::highp_vec2>(A);
 	
 	
-	//my_vec2 I;
-	//glm::vec2 J = static_cast<glm::vec2>(I);
+	my_vec2 I;
+	glm::vec2 J = static_cast<glm::vec2>(I);
+	glm::vec2 K(7.8);
 
 
 	int Error(0);
 	int Error(0);
 	
 	

+ 7 - 1
test/gtc/gtc_matrix_transform.cpp

@@ -7,15 +7,21 @@
 // File    : test/gtc/matrix_transform.cpp
 // File    : test/gtc/matrix_transform.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 
+#define GLM_FORCE_RADIANS
 #include <glm/glm.hpp>
 #include <glm/glm.hpp>
 #include <glm/gtc/matrix_transform.hpp>
 #include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/constants.hpp>
 
 
 int main()
 int main()
 {
 {
 	int Error = 0;
 	int Error = 0;
 	
 	
-	glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
+	glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.0f);
 	glm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));
 	glm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));
 
 
+	glm::lowp_vec3 v(1.0);
+	glm::lowp_mat4 m(0);
+	glm::lowp_mat4 t = glm::translate(m, v);
+
 	return Error;
 	return Error;
 }
 }