Commits

Jason McKesson committed ce293d3

Upgraded GLM to 0.9.2.3

Comments (0)

Files changed (283)

Tut 08 Getting Oriented/Interpolation.cpp

 	float theta_0 = acosf(dot);
 	float theta = theta_0*alpha;
 
-	glm::fquat v2 = v1 - v0*dot;
+	glm::fquat v2 = v1 + -(v0*dot);
 	v2 = glm::normalize(v2);
 
 	return v0*cos(theta) + v2*sin(theta);

framework/MatrixStack.cpp

 #include <glload/gl_3_2_comp.h>
 #include "framework.h"
 #include "MatrixStack.h"
-#include <glm/gtc/matrix_projection.hpp>
+#include <glm/gtc/matrix_transform.hpp>
 
 namespace Framework
 {

framework/framework.lua

 		objdir "../framework/lib"
 
 		includedirs {"../freeglut-2.6.0/include", "../glload/include",
-			"../glimg/include", "../glm-0.9.0.7", "../tinyxml",
+			"../glimg/include", "../glm-0.9.2.3", "../tinyxml",
 			"../framework"}
 		
 		configuration "Debug"
 		files {...}
 
 		includedirs {"../freeglut-2.6.0/include", "../glload/include",
-			"../glimg/include", "../glm-0.9.0.7", "../tinyxml"}
+			"../glimg/include", "../glm-0.9.2.3", "../tinyxml"}
 			
 		links "framework"
 

glm-0.9.2.3/CMakeLists.txt

+cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
+cmake_policy(VERSION 2.6)
+
+project(glm)
+enable_testing()
+
+add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+	#add_definitions(/Za)
+	#add_definitions(-pedantic)
+	#add_definitions(-S)
+	#add_definitions(-s)
+	add_definitions(-msse2)
+	#add_definitions(-m32)
+	#add_definitions(-mfpmath=387)
+	#add_definitions(-ffast-math)
+	#add_definitions(-O3)
+endif()
+
+include_directories(".")
+
+add_subdirectory(glm)
+add_subdirectory(test)
+add_subdirectory(bench)
+add_subdirectory(doc)
+
+option(GLM_TEST_MODE "GLM test" OFF)
+if(NOT GLM_TEST_MODE)
+	message(FATAL_ERROR "GLM is a header only library, no need to build it. Set the option GLM_TEST_MODE with ON to build and run the test bench")
+endif()
+
+install(DIRECTORY glm DESTINATION include)

glm-0.9.2.3/bench/CMakeLists.txt

+function(glmCreateBenchGTC NAME)
+	set(SAMPLE_NAME bench-${NAME})
+
+	add_executable(${SAMPLE_NAME} ${NAME}.cpp)
+endfunction(glmCreateBenchGTC)
+
+add_subdirectory(core)
+add_subdirectory(gtc)
+add_subdirectory(gtx)
+
+
Add a comment to this file

glm-0.9.2.3/bench/core/CMakeLists.txt

Empty file added.

Add a comment to this file

glm-0.9.2.3/bench/gtc/CMakeLists.txt

Empty file added.

Add a comment to this file

glm-0.9.2.3/bench/gtx/CMakeLists.txt

Empty file added.

glm-0.9.2.3/copying.txt

+The MIT License
+
+Copyright (c) 2005 - 2011 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

glm-0.9.2.3/glm/CMakeLists.txt

+set(NAME glm)
+
+file(GLOB ROOT_SOURCE *.cpp)
+file(GLOB ROOT_INLINE *.inl)
+file(GLOB ROOT_HEADER *.hpp)
+
+file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp)
+file(GLOB_RECURSE CORE_INLINE ./core/*.inl)
+file(GLOB_RECURSE CORE_HEADER ./core/*.hpp)
+
+file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
+file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
+file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
+
+file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
+file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
+file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
+
+file(GLOB_RECURSE VIRTREV_SOURCE ./virtrev/*.cpp)
+file(GLOB_RECURSE VIRTREV_INLINE ./virtrev/*.inl)
+file(GLOB_RECURSE VIRTREV_HEADER ./virtrev/*.hpp)
+
+source_group("Core Files" FILES ${CORE_SOURCE})
+source_group("Core Files" FILES ${CORE_INLINE})
+source_group("Core Files" FILES ${CORE_HEADER})
+source_group("GTC Files" FILES ${GTC_SOURCE})
+source_group("GTC Files" FILES ${GTC_INLINE})
+source_group("GTC Files" FILES ${GTC_HEADER})
+source_group("GTX Files" FILES ${GTX_SOURCE})
+source_group("GTX Files" FILES ${GTX_INLINE})
+source_group("GTX Files" FILES ${GTX_HEADER})
+source_group("VIRTREV Files" FILES ${VIRTREV_SOURCE})
+source_group("VIRTREV Files" FILES ${VIRTREV_INLINE})
+source_group("VIRTREV Files" FILES ${VIRTREV_HEADER})
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
+
+add_executable(${NAME} 
+	${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER} 
+	${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
+	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER} 
+	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER} 
+	${VIRTREV_SOURCE} ${VIRTREV_INLINE} ${VIRTREV_HEADER})

glm-0.9.2.3/glm/core/_detail.hpp

+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-07-24
+// Updated : 2008-08-31
+// Licence : This source is under MIT License
+// File    : glm/core/_detail.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_detail
+#define glm_core_detail
+
+#include "setup.hpp"
+#include <cassert>
+
+namespace glm{
+namespace detail
+{
+	class thalf;
+
+#if(__STDC_VERSION__ >= 199901L) // C99 detected, 64 bit types available
+	typedef int64_t								sint64;
+	typedef uint64_t							uint64;
+#elif(GLM_COMPILER & GLM_COMPILER_VC)
+	typedef signed __int64						sint64;
+	typedef unsigned __int64					uint64;
+#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
+	__extension__ typedef signed long long		sint64;
+	__extension__ typedef unsigned long long	uint64;
+#elif(GLM_COMPILER & GLM_COMPILER_BC)
+	typedef Int64								sint64;
+	typedef Uint64								uint64;
+#else//unknown compiler
+	typedef signed long	long					sint64;
+	typedef unsigned long long					uint64;
+#endif//GLM_COMPILER
+
+	template<bool C>
+	struct If
+	{
+		template<typename F, typename T>
+		static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
+		{
+			return functor(val);
+		}
+	};
+
+	template<>
+	struct If<false>
+	{
+		template<typename F, typename T>
+		static GLM_FUNC_QUALIFIER T apply(F, const T& val)
+		{
+			return val;
+		}
+	};
+
+	//template <typename T>
+	//struct traits
+	//{
+	//	static const bool is_signed = false;
+	//	static const bool is_float = false;
+	//	static const bool is_vector = false;
+	//	static const bool is_matrix = false;
+	//	static const bool is_genType = false;
+	//	static const bool is_genIType = false;
+	//	static const bool is_genUType = false;
+	//};
+
+	//template <>
+	//struct traits<half>
+	//{
+	//	static const bool is_float = true;
+	//	static const bool is_genType = true;
+	//};
+
+	//template <>
+	//struct traits<float>
+	//{
+	//	static const bool is_float = true;
+	//	static const bool is_genType = true;
+	//};
+
+	//template <>
+	//struct traits<double>
+	//{
+	//	static const bool is_float = true;
+	//	static const bool is_genType = true;
+	//};
+
+	//template <typename genType>
+	//struct desc
+	//{
+	//	typedef genType							type;
+	//	typedef genType *						pointer;
+	//	typedef genType const*					const_pointer;
+	//	typedef genType const *const			const_pointer_const;
+	//	typedef genType *const					pointer_const;
+	//	typedef genType &						reference;
+	//	typedef genType const&					const_reference;
+	//	typedef genType const&					param_type;
+
+	//	typedef typename genType::value_type	value_type;
+	//	typedef typename genType::size_type		size_type;
+	//	static const typename size_type			value_size;
+	//};
+
+	//template <typename genType>
+	//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
+
+	union uif32
+	{
+		GLM_FUNC_QUALIFIER uif32() :
+			i(0)
+		{}
+
+		GLM_FUNC_QUALIFIER uif32(float f) :
+			f(f)
+		{}
+
+		GLM_FUNC_QUALIFIER uif32(unsigned int i) :
+			i(i)
+		{}
+
+		float f;
+		unsigned int i;
+	};
+
+	union uif64
+	{
+		GLM_FUNC_QUALIFIER uif64() :
+			i(0)
+		{}
+
+		GLM_FUNC_QUALIFIER uif64(double f) :
+			f(f)
+		{}
+
+		GLM_FUNC_QUALIFIER uif64(uint64 i) :
+			i(i)
+		{}
+
+		double f;
+		uint64 i;
+	};
+
+	typedef uif32 uif;
+
+	//////////////////
+	// int
+
+	template <typename T>
+	struct is_int
+	{
+		enum is_int_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+
+#define GLM_DETAIL_IS_INT(T)	\
+	template <>					\
+	struct is_int<T>			\
+	{							\
+		enum is_int_enum		\
+		{						\
+			_YES = 1,			\
+			_NO = 0				\
+		};						\
+	}
+
+	//////////////////
+	// uint
+
+	template <typename T>
+	struct is_uint
+	{
+		enum is_uint_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+
+#define GLM_DETAIL_IS_UINT(T)	\
+	template <>					\
+	struct is_uint<T>			\
+	{							\
+		enum is_uint_enum		\
+		{						\
+			_YES = 1,			\
+			_NO = 0				\
+		};						\
+	}
+
+	//GLM_DETAIL_IS_UINT(unsigned long long)
+
+	//////////////////
+	// float
+
+	template <typename T>
+	struct is_float
+	{
+		enum is_float_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+
+#define GLM_DETAIL_IS_FLOAT(T)	\
+	template <>					\
+	struct is_float<T>			\
+	{							\
+		enum is_float_enum		\
+		{						\
+			_YES = 1,			\
+			_NO = 0				\
+		};						\
+	}
+
+	//////////////////
+	// bool
+
+	template <typename T>
+	struct is_bool
+	{
+		enum is_bool_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+	
+	template <>
+	struct is_bool<bool>
+	{
+		enum is_bool_enum
+		{
+			_YES = 1,
+			_NO = 0
+		};
+	};
+	
+	//////////////////
+	// vector
+
+	template <typename T>
+	struct is_vector
+	{
+		enum is_vector_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+
+#	define GLM_DETAIL_IS_VECTOR(TYPE) \
+		template <typename T> \
+		struct is_vector<TYPE<T> > \
+		{ \
+			enum is_vector_enum \
+			{ \
+				_YES = 1, \
+				_NO = 0 \
+			}; \
+		}
+
+	//////////////////
+	// matrix
+
+	template <typename T>
+	struct is_matrix
+	{
+		enum is_matrix_enum
+		{
+			_YES = 0,
+			_NO = 1
+		};
+	};
+
+#define GLM_DETAIL_IS_MATRIX(T)	\
+	template <>					\
+	struct is_matrix			\
+	{							\
+		enum is_matrix_enum		\
+		{						\
+			_YES = 1,			\
+			_NO = 0				\
+		};						\
+	}
+
+	//////////////////
+	// type
+
+	template <typename T>
+	struct type
+	{
+		enum type_enum
+		{
+			is_float = is_float<T>::_YES,
+			is_int = is_int<T>::_YES,
+			is_uint = is_uint<T>::_YES,
+			is_bool = is_bool<T>::_YES
+		};
+	};
+
+	//////////////////
+	// type
+
+	typedef signed char							int8;
+	typedef signed short						int16;
+	typedef signed int							int32;
+	typedef detail::sint64						int64;
+
+	typedef unsigned char						uint8;
+	typedef unsigned short						uint16;
+	typedef unsigned int						uint32;
+	typedef detail::uint64						uint64;
+
+	typedef detail::thalf						float16;
+	typedef float								float32;
+	typedef double								float64;
+
+}//namespace detail
+}//namespace glm
+
+#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
+#	define GLM_DEPRECATED __declspec(deprecated)
+#	define GLM_ALIGN(x) __declspec(align(x)) 
+#	define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct 
+#	define GLM_RESTRICT __declspec(restrict)
+#	define GLM_RESTRICT_VAR __restrict
+#elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
+#	define GLM_DEPRECATED __attribute__((__deprecated__))
+#	define GLM_ALIGN(x) __attribute__((aligned(x)))
+#	define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
+#	if(GLM_COMPILER >= GLM_COMPILER_GCC33)
+#		define GLM_RESTRICT __restrict__
+#		define GLM_RESTRICT_VAR __restrict__
+#	else
+#		define GLM_RESTRICT
+#		define GLM_RESTRICT_VAR
+#	endif
+#	define GLM_RESTRICT __restrict__
+#	define GLM_RESTRICT_VAR __restrict__
+#else
+#	define GLM_DEPRECATED
+#	define GLM_ALIGN
+#	define GLM_ALIGNED_STRUCT(x) 
+#	define GLM_RESTRICT
+#	define GLM_RESTRICT_VAR
+#endif//GLM_COMPILER
+
+#endif//glm_core_detail

glm-0.9.2.3/glm/core/_fixes.hpp

+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-02-21
+// Updated : 2011-02-21
+// Licence : This source is under MIT License
+// File    : glm/core/_fixes.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+//! Workaround for compatibility with other libraries
+#ifdef max
+#undef max
+#endif
+
+//! Workaround for compatibility with other libraries
+#ifdef min
+#undef min
+#endif

glm-0.9.2.3/glm/core/_swizzle.hpp

+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-04-20
+// Updated : 2008-08-22
+// Licence : This source is under MIT License
+// File    : glm/core/_swizzle.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_swizzle
+#define glm_core_swizzle
+
+namespace glm
+{
+	enum comp
+	{
+		X = 0,
+		R = 0,
+		S = 0,
+		Y = 1,
+		G = 1,
+		T = 1,
+		Z = 2,
+		B = 2,
+		P = 2,
+		W = 3,
+		A = 3,
+		Q = 3
+	};
+}//namespace glm
+
+#if(defined(GLM_SWIZZLE_XYZW) || defined(GLM_SWIZZLE))
+
+#define xx swizzle(glm::X, glm::X)
+#define yx swizzle(glm::Y, glm::X)
+#define zx swizzle(glm::Z, glm::X)
+#define wx swizzle(glm::W, glm::X)
+#define xy swizzle(glm::X, glm::Y)
+#define yy swizzle(glm::Y, glm::Y)
+#define zy swizzle(glm::Z, glm::Y)
+#define wy swizzle(glm::W, glm::Y)
+#define xz swizzle(glm::X, glm::Z)
+#define yz swizzle(glm::Y, glm::Z)
+#define zz swizzle(glm::Z, glm::Z)
+#define wz swizzle(glm::W, glm::Z)
+#define xw swizzle(glm::X, glm::W)
+#define yw swizzle(glm::Y, glm::W)
+#define zw swizzle(glm::Z, glm::W)
+#define ww swizzle(glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_SWIZZLE_RGBA) || defined(GLM_SWIZZLE))
+
+#define rr swizzle(glm::X, glm::X)
+#define gr swizzle(glm::Y, glm::X)
+#define br swizzle(glm::Z, glm::X)
+#define ar swizzle(glm::W, glm::X)
+#define rg swizzle(glm::X, glm::Y)
+#define gg swizzle(glm::Y, glm::Y)
+#define bg swizzle(glm::Z, glm::Y)
+#define ag swizzle(glm::W, glm::Y)
+#define rb swizzle(glm::X, glm::Z)
+#define gb swizzle(glm::Y, glm::Z)
+#define bb swizzle(glm::Z, glm::Z)
+#define ab swizzle(glm::W, glm::Z)
+#define ra swizzle(glm::X, glm::W)
+#define ga swizzle(glm::Y, glm::W)
+#define ba swizzle(glm::Z, glm::W)
+#define aa swizzle(glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_FORCE_SWIZZLE_STPQ) || defined(GLM_SWIZZLE))
+
+#define ss swizzle(glm::X, glm::X)
+#define ts swizzle(glm::Y, glm::X)
+#define ps swizzle(glm::Z, glm::X)
+#define qs swizzle(glm::W, glm::X)
+#define st swizzle(glm::X, glm::Y)
+#define tt swizzle(glm::Y, glm::Y)
+#define pt swizzle(glm::Z, glm::Y)
+#define qt swizzle(glm::W, glm::Y)
+#define sp swizzle(glm::X, glm::Z)
+#define tp swizzle(glm::Y, glm::Z)
+#define pp swizzle(glm::Z, glm::Z)
+#define qp swizzle(glm::W, glm::Z)
+#define sq swizzle(glm::X, glm::W)
+#define tq swizzle(glm::Y, glm::W)
+#define pq swizzle(glm::Z, glm::W)
+#define qq swizzle(glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_SWIZZLE_XYZW) || defined(GLM_SWIZZLE))
+
+#define xxx swizzle(glm::X, glm::X, glm::X)
+#define yxx swizzle(glm::Y, glm::X, glm::X)
+#define zxx swizzle(glm::Z, glm::X, glm::X)
+#define wxx swizzle(glm::W, glm::X, glm::X)
+#define xyx swizzle(glm::X, glm::Y, glm::X)
+#define yyx swizzle(glm::Y, glm::Y, glm::X)
+#define zyx swizzle(glm::Z, glm::Y, glm::X)
+#define wyx swizzle(glm::W, glm::Y, glm::X)
+#define xzx swizzle(glm::X, glm::Z, glm::X)
+#define yzx swizzle(glm::Y, glm::Z, glm::X)
+#define zzx swizzle(glm::Z, glm::Z, glm::X)
+#define wzx swizzle(glm::W, glm::Z, glm::X)
+#define xwx swizzle(glm::X, glm::W, glm::X)
+#define ywx swizzle(glm::Y, glm::W, glm::X)
+#define zwx swizzle(glm::Z, glm::W, glm::X)
+#define wwx swizzle(glm::W, glm::W, glm::X)
+#define xxy swizzle(glm::X, glm::X, glm::Y)
+#define yxy swizzle(glm::Y, glm::X, glm::Y)
+#define zxy swizzle(glm::Z, glm::X, glm::Y)
+#define wxy swizzle(glm::W, glm::X, glm::Y)
+#define xyy swizzle(glm::X, glm::Y, glm::Y)
+#define yyy swizzle(glm::Y, glm::Y, glm::Y)
+#define zyy swizzle(glm::Z, glm::Y, glm::Y)
+#define wyy swizzle(glm::W, glm::Y, glm::Y)
+#define xzy swizzle(glm::X, glm::Z, glm::Y)
+#define yzy swizzle(glm::Y, glm::Z, glm::Y)
+#define zzy swizzle(glm::Z, glm::Z, glm::Y)
+#define wzy swizzle(glm::W, glm::Z, glm::Y)
+#define xwy swizzle(glm::X, glm::W, glm::Y)
+#define ywy swizzle(glm::Y, glm::W, glm::Y)
+#define zwy swizzle(glm::Z, glm::W, glm::Y)
+#define wwy swizzle(glm::W, glm::W, glm::Y)
+#define xxz swizzle(glm::X, glm::X, glm::Z)
+#define yxz swizzle(glm::Y, glm::X, glm::Z)
+#define zxz swizzle(glm::Z, glm::X, glm::Z)
+#define wxz swizzle(glm::W, glm::X, glm::Z)
+#define xyz swizzle(glm::X, glm::Y, glm::Z)
+#define yyz swizzle(glm::Y, glm::Y, glm::Z)
+#define zyz swizzle(glm::Z, glm::Y, glm::Z)
+#define wyz swizzle(glm::W, glm::Y, glm::Z)
+#define xzz swizzle(glm::X, glm::Z, glm::Z)
+#define yzz swizzle(glm::Y, glm::Z, glm::Z)
+#define zzz swizzle(glm::Z, glm::Z, glm::Z)
+#define wzz swizzle(glm::W, glm::Z, glm::Z)
+#define xwz swizzle(glm::X, glm::W, glm::Z)
+#define ywz swizzle(glm::Y, glm::W, glm::Z)
+#define zwz swizzle(glm::Z, glm::W, glm::Z)
+#define wwz swizzle(glm::W, glm::W, glm::Z)
+#define xxw swizzle(glm::X, glm::X, glm::W)
+#define yxw swizzle(glm::Y, glm::X, glm::W)
+#define zxw swizzle(glm::Z, glm::X, glm::W)
+#define wxw swizzle(glm::W, glm::X, glm::W)
+#define xyw swizzle(glm::X, glm::Y, glm::W)
+#define yyw swizzle(glm::Y, glm::Y, glm::W)
+#define zyw swizzle(glm::Z, glm::Y, glm::W)
+#define wyw swizzle(glm::W, glm::Y, glm::W)
+#define xzw swizzle(glm::X, glm::Z, glm::W)
+#define yzw swizzle(glm::Y, glm::Z, glm::W)
+#define zzw swizzle(glm::Z, glm::Z, glm::W)
+#define wzw swizzle(glm::W, glm::Z, glm::W)
+#define xww swizzle(glm::X, glm::W, glm::W)
+#define yww swizzle(glm::Y, glm::W, glm::W)
+#define zww swizzle(glm::Z, glm::W, glm::W)
+#define www swizzle(glm::W, glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_SWIZZLE_RGBA) || defined(GLM_SWIZZLE))
+
+#define rrr swizzle(glm::X, glm::X, glm::X)
+#define grr swizzle(glm::Y, glm::X, glm::X)
+#define brr swizzle(glm::Z, glm::X, glm::X)
+#define arr swizzle(glm::W, glm::X, glm::X)
+#define rgr swizzle(glm::X, glm::Y, glm::X)
+#define ggr swizzle(glm::Y, glm::Y, glm::X)
+#define bgr swizzle(glm::Z, glm::Y, glm::X)
+#define agr swizzle(glm::W, glm::Y, glm::X)
+#define rbr swizzle(glm::X, glm::Z, glm::X)
+#define gbr swizzle(glm::Y, glm::Z, glm::X)
+#define bbr swizzle(glm::Z, glm::Z, glm::X)
+#define abr swizzle(glm::W, glm::Z, glm::X)
+#define rar swizzle(glm::X, glm::W, glm::X)
+#define gar swizzle(glm::Y, glm::W, glm::X)
+#define bar swizzle(glm::Z, glm::W, glm::X)
+#define aar swizzle(glm::W, glm::W, glm::X)
+#define rrg swizzle(glm::X, glm::X, glm::Y)
+#define grg swizzle(glm::Y, glm::X, glm::Y)
+#define brg swizzle(glm::Z, glm::X, glm::Y)
+#define arg swizzle(glm::W, glm::X, glm::Y)
+#define rgg swizzle(glm::X, glm::Y, glm::Y)
+#define ggg swizzle(glm::Y, glm::Y, glm::Y)
+#define bgg swizzle(glm::Z, glm::Y, glm::Y)
+#define agg swizzle(glm::W, glm::Y, glm::Y)
+#define rbg swizzle(glm::X, glm::Z, glm::Y)
+#define gbg swizzle(glm::Y, glm::Z, glm::Y)
+#define bbg swizzle(glm::Z, glm::Z, glm::Y)
+#define abg swizzle(glm::W, glm::Z, glm::Y)
+#define rag swizzle(glm::X, glm::W, glm::Y)
+#define gag swizzle(glm::Y, glm::W, glm::Y)
+#define bag swizzle(glm::Z, glm::W, glm::Y)
+#define aag swizzle(glm::W, glm::W, glm::Y)
+#define rrb swizzle(glm::X, glm::X, glm::Z)
+#define grb swizzle(glm::Y, glm::X, glm::Z)
+#define brb swizzle(glm::Z, glm::X, glm::Z)
+#define arb swizzle(glm::W, glm::X, glm::Z)
+#define rgb swizzle(glm::X, glm::Y, glm::Z)
+#define ggb swizzle(glm::Y, glm::Y, glm::Z)
+#define bgb swizzle(glm::Z, glm::Y, glm::Z)
+#define agb swizzle(glm::W, glm::Y, glm::Z)
+#define rbb swizzle(glm::X, glm::Z, glm::Z)
+#define gbb swizzle(glm::Y, glm::Z, glm::Z)
+#define bbb swizzle(glm::Z, glm::Z, glm::Z)
+#define abb swizzle(glm::W, glm::Z, glm::Z)
+#define rab swizzle(glm::X, glm::W, glm::Z)
+#define gab swizzle(glm::Y, glm::W, glm::Z)
+#define bab swizzle(glm::Z, glm::W, glm::Z)
+#define aab swizzle(glm::W, glm::W, glm::Z)
+#define rra swizzle(glm::X, glm::X, glm::W)
+#define gra swizzle(glm::Y, glm::X, glm::W)
+#define bra swizzle(glm::Z, glm::X, glm::W)
+#define ara swizzle(glm::W, glm::X, glm::W)
+#define rga swizzle(glm::X, glm::Y, glm::W)
+#define gga swizzle(glm::Y, glm::Y, glm::W)
+#define bga swizzle(glm::Z, glm::Y, glm::W)
+#define aga swizzle(glm::W, glm::Y, glm::W)
+#define rba swizzle(glm::X, glm::Z, glm::W)
+#define gba swizzle(glm::Y, glm::Z, glm::W)
+#define bba swizzle(glm::Z, glm::Z, glm::W)
+#define aba swizzle(glm::W, glm::Z, glm::W)
+#define raa swizzle(glm::X, glm::W, glm::W)
+#define gaa swizzle(glm::Y, glm::W, glm::W)
+#define baa swizzle(glm::Z, glm::W, glm::W)
+#define aaa swizzle(glm::W, glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_FORCE_SWIZZLE_STPQ) || defined(GLM_SWIZZLE))
+
+#define sss swizzle(glm::X, glm::X, glm::X)
+#define tss swizzle(glm::Y, glm::X, glm::X)
+#define pss swizzle(glm::Z, glm::X, glm::X)
+#define qss swizzle(glm::W, glm::X, glm::X)
+#define sts swizzle(glm::X, glm::Y, glm::X)
+#define tts swizzle(glm::Y, glm::Y, glm::X)
+#define pts swizzle(glm::Z, glm::Y, glm::X)
+#define qts swizzle(glm::W, glm::Y, glm::X)
+#define sps swizzle(glm::X, glm::Z, glm::X)
+#define tps swizzle(glm::Y, glm::Z, glm::X)
+#define pps swizzle(glm::Z, glm::Z, glm::X)
+#define qps swizzle(glm::W, glm::Z, glm::X)
+#define sqs swizzle(glm::X, glm::W, glm::X)
+#define tqs swizzle(glm::Y, glm::W, glm::X)
+#define pqs swizzle(glm::Z, glm::W, glm::X)
+#define qqs swizzle(glm::W, glm::W, glm::X)
+#define sst swizzle(glm::X, glm::X, glm::Y)
+#define tst swizzle(glm::Y, glm::X, glm::Y)
+#define pst swizzle(glm::Z, glm::X, glm::Y)
+#define qst swizzle(glm::W, glm::X, glm::Y)
+#define stt swizzle(glm::X, glm::Y, glm::Y)
+#define ttt swizzle(glm::Y, glm::Y, glm::Y)
+#define ptt swizzle(glm::Z, glm::Y, glm::Y)
+#define qtt swizzle(glm::W, glm::Y, glm::Y)
+#define spt swizzle(glm::X, glm::Z, glm::Y)
+#define tpt swizzle(glm::Y, glm::Z, glm::Y)
+#define ppt swizzle(glm::Z, glm::Z, glm::Y)
+#define qpt swizzle(glm::W, glm::Z, glm::Y)
+#define sqt swizzle(glm::X, glm::W, glm::Y)
+#define tqt swizzle(glm::Y, glm::W, glm::Y)
+#define pqt swizzle(glm::Z, glm::W, glm::Y)
+#define qqt swizzle(glm::W, glm::W, glm::Y)
+#define ssp swizzle(glm::X, glm::X, glm::Z)
+#define tsp swizzle(glm::Y, glm::X, glm::Z)
+#define psp swizzle(glm::Z, glm::X, glm::Z)
+#define qsp swizzle(glm::W, glm::X, glm::Z)
+#define stp swizzle(glm::X, glm::Y, glm::Z)
+#define ttp swizzle(glm::Y, glm::Y, glm::Z)
+#define ptp swizzle(glm::Z, glm::Y, glm::Z)
+#define qtp swizzle(glm::W, glm::Y, glm::Z)
+#define spp swizzle(glm::X, glm::Z, glm::Z)
+#define tpp swizzle(glm::Y, glm::Z, glm::Z)
+#define ppp swizzle(glm::Z, glm::Z, glm::Z)
+#define qpp swizzle(glm::W, glm::Z, glm::Z)
+#define sqp swizzle(glm::X, glm::W, glm::Z)
+#define tqp swizzle(glm::Y, glm::W, glm::Z)
+#define pqp swizzle(glm::Z, glm::W, glm::Z)
+#define qqp swizzle(glm::W, glm::W, glm::Z)
+#define ssq swizzle(glm::X, glm::X, glm::W)
+#define tsq swizzle(glm::Y, glm::X, glm::W)
+#define psq swizzle(glm::Z, glm::X, glm::W)
+#define qsq swizzle(glm::W, glm::X, glm::W)
+#define stq swizzle(glm::X, glm::Y, glm::W)
+#define ttq swizzle(glm::Y, glm::Y, glm::W)
+#define ptq swizzle(glm::Z, glm::Y, glm::W)
+#define qtq swizzle(glm::W, glm::Y, glm::W)
+#define spq swizzle(glm::X, glm::Z, glm::W)
+#define tpq swizzle(glm::Y, glm::Z, glm::W)
+#define ppq swizzle(glm::Z, glm::Z, glm::W)
+#define qpq swizzle(glm::W, glm::Z, glm::W)
+#define sqq swizzle(glm::X, glm::W, glm::W)
+#define tqq swizzle(glm::Y, glm::W, glm::W)
+#define pqq swizzle(glm::Z, glm::W, glm::W)
+#define qqq swizzle(glm::W, glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_SWIZZLE_XYZW) || defined(GLM_SWIZZLE))
+
+#define xxxx swizzle(glm::X, glm::X, glm::X, glm::X)
+#define yxxx swizzle(glm::Y, glm::X, glm::X, glm::X)
+#define zxxx swizzle(glm::Z, glm::X, glm::X, glm::X)
+#define wxxx swizzle(glm::W, glm::X, glm::X, glm::X)
+#define xyxx swizzle(glm::X, glm::Y, glm::X, glm::X)
+#define yyxx swizzle(glm::Y, glm::Y, glm::X, glm::X)
+#define zyxx swizzle(glm::Z, glm::Y, glm::X, glm::X)
+#define wyxx swizzle(glm::W, glm::Y, glm::X, glm::X)
+#define xzxx swizzle(glm::X, glm::Z, glm::X, glm::X)
+#define yzxx swizzle(glm::Y, glm::Z, glm::X, glm::X)
+#define zzxx swizzle(glm::Z, glm::Z, glm::X, glm::X)
+#define wzxx swizzle(glm::W, glm::Z, glm::X, glm::X)
+#define xwxx swizzle(glm::X, glm::W, glm::X, glm::X)
+#define ywxx swizzle(glm::Y, glm::W, glm::X, glm::X)
+#define zwxx swizzle(glm::Z, glm::W, glm::X, glm::X)
+#define wwxx swizzle(glm::W, glm::W, glm::X, glm::X)
+#define xxyx swizzle(glm::X, glm::X, glm::Y, glm::X)
+#define yxyx swizzle(glm::Y, glm::X, glm::Y, glm::X)
+#define zxyx swizzle(glm::Z, glm::X, glm::Y, glm::X)
+#define wxyx swizzle(glm::W, glm::X, glm::Y, glm::X)
+#define xyyx swizzle(glm::X, glm::Y, glm::Y, glm::X)
+#define yyyx swizzle(glm::Y, glm::Y, glm::Y, glm::X)
+#define zyyx swizzle(glm::Z, glm::Y, glm::Y, glm::X)
+#define wyyx swizzle(glm::W, glm::Y, glm::Y, glm::X)
+#define xzyx swizzle(glm::X, glm::Z, glm::Y, glm::X)
+#define yzyx swizzle(glm::Y, glm::Z, glm::Y, glm::X)
+#define zzyx swizzle(glm::Z, glm::Z, glm::Y, glm::X)
+#define wzyx swizzle(glm::W, glm::Z, glm::Y, glm::X)
+#define xwyx swizzle(glm::X, glm::W, glm::Y, glm::X)
+#define ywyx swizzle(glm::Y, glm::W, glm::Y, glm::X)
+#define zwyx swizzle(glm::Z, glm::W, glm::Y, glm::X)
+#define wwyx swizzle(glm::W, glm::W, glm::Y, glm::X)
+#define xxzx swizzle(glm::X, glm::X, glm::Z, glm::X)
+#define yxzx swizzle(glm::Y, glm::X, glm::Z, glm::X)
+#define zxzx swizzle(glm::Z, glm::X, glm::Z, glm::X)
+#define wxzx swizzle(glm::W, glm::X, glm::Z, glm::X)
+#define xyzx swizzle(glm::X, glm::Y, glm::Z, glm::X)
+#define yyzx swizzle(glm::Y, glm::Y, glm::Z, glm::X)
+#define zyzx swizzle(glm::Z, glm::Y, glm::Z, glm::X)
+#define wyzx swizzle(glm::W, glm::Y, glm::Z, glm::X)
+#define xzzx swizzle(glm::X, glm::Z, glm::Z, glm::X)
+#define yzzx swizzle(glm::Y, glm::Z, glm::Z, glm::X)
+#define zzzx swizzle(glm::Z, glm::Z, glm::Z, glm::X)
+#define wzzx swizzle(glm::W, glm::Z, glm::Z, glm::X)
+#define xwzx swizzle(glm::X, glm::W, glm::Z, glm::X)
+#define ywzx swizzle(glm::Y, glm::W, glm::Z, glm::X)
+#define zwzx swizzle(glm::Z, glm::W, glm::Z, glm::X)
+#define wwzx swizzle(glm::W, glm::W, glm::Z, glm::X)
+#define xxwx swizzle(glm::X, glm::X, glm::W, glm::X)
+#define yxwx swizzle(glm::Y, glm::X, glm::W, glm::X)
+#define zxwx swizzle(glm::Z, glm::X, glm::W, glm::X)
+#define wxwx swizzle(glm::W, glm::X, glm::W, glm::X)
+#define xywx swizzle(glm::X, glm::Y, glm::W, glm::X)
+#define yywx swizzle(glm::Y, glm::Y, glm::W, glm::X)
+#define zywx swizzle(glm::Z, glm::Y, glm::W, glm::X)
+#define wywx swizzle(glm::W, glm::Y, glm::W, glm::X)
+#define xzwx swizzle(glm::X, glm::Z, glm::W, glm::X)
+#define yzwx swizzle(glm::Y, glm::Z, glm::W, glm::X)
+#define zzwx swizzle(glm::Z, glm::Z, glm::W, glm::X)
+#define wzwx swizzle(glm::W, glm::Z, glm::W, glm::X)
+#define xwwx swizzle(glm::X, glm::W, glm::W, glm::X)
+#define ywwx swizzle(glm::Y, glm::W, glm::W, glm::X)
+#define zwwx swizzle(glm::Z, glm::W, glm::W, glm::X)
+#define wwwx swizzle(glm::W, glm::W, glm::W, glm::X)
+#define xxxy swizzle(glm::X, glm::X, glm::X, glm::Y)
+#define yxxy swizzle(glm::Y, glm::X, glm::X, glm::Y)
+#define zxxy swizzle(glm::Z, glm::X, glm::X, glm::Y)
+#define wxxy swizzle(glm::W, glm::X, glm::X, glm::Y)
+#define xyxy swizzle(glm::X, glm::Y, glm::X, glm::Y)
+#define yyxy swizzle(glm::Y, glm::Y, glm::X, glm::Y)
+#define zyxy swizzle(glm::Z, glm::Y, glm::X, glm::Y)
+#define wyxy swizzle(glm::W, glm::Y, glm::X, glm::Y)
+#define xzxy swizzle(glm::X, glm::Z, glm::X, glm::Y)
+#define yzxy swizzle(glm::Y, glm::Z, glm::X, glm::Y)
+#define zzxy swizzle(glm::Z, glm::Z, glm::X, glm::Y)
+#define wzxy swizzle(glm::W, glm::Z, glm::X, glm::Y)
+#define xwxy swizzle(glm::X, glm::W, glm::X, glm::Y)
+#define ywxy swizzle(glm::Y, glm::W, glm::X, glm::Y)
+#define zwxy swizzle(glm::Z, glm::W, glm::X, glm::Y)
+#define wwxy swizzle(glm::W, glm::W, glm::X, glm::Y)
+#define xxyy swizzle(glm::X, glm::X, glm::Y, glm::Y)
+#define yxyy swizzle(glm::Y, glm::X, glm::Y, glm::Y)
+#define zxyy swizzle(glm::Z, glm::X, glm::Y, glm::Y)
+#define wxyy swizzle(glm::W, glm::X, glm::Y, glm::Y)
+#define xyyy swizzle(glm::X, glm::Y, glm::Y, glm::Y)
+#define yyyy swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
+#define zyyy swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
+#define wyyy swizzle(glm::W, glm::Y, glm::Y, glm::Y)
+#define xzyy swizzle(glm::X, glm::Z, glm::Y, glm::Y)
+#define yzyy swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
+#define zzyy swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
+#define wzyy swizzle(glm::W, glm::Z, glm::Y, glm::Y)
+#define xwyy swizzle(glm::X, glm::W, glm::Y, glm::Y)
+#define ywyy swizzle(glm::Y, glm::W, glm::Y, glm::Y)
+#define zwyy swizzle(glm::Z, glm::W, glm::Y, glm::Y)
+#define wwyy swizzle(glm::W, glm::W, glm::Y, glm::Y)
+#define xxzy swizzle(glm::X, glm::X, glm::Z, glm::Y)
+#define yxzy swizzle(glm::Y, glm::X, glm::Z, glm::Y)
+#define zxzy swizzle(glm::Z, glm::X, glm::Z, glm::Y)
+#define wxzy swizzle(glm::W, glm::X, glm::Z, glm::Y)
+#define xyzy swizzle(glm::X, glm::Y, glm::Z, glm::Y)
+#define yyzy swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
+#define zyzy swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
+#define wyzy swizzle(glm::W, glm::Y, glm::Z, glm::Y)
+#define xzzy swizzle(glm::X, glm::Z, glm::Z, glm::Y)
+#define yzzy swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
+#define zzzy swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
+#define wzzy swizzle(glm::W, glm::Z, glm::Z, glm::Y)
+#define xwzy swizzle(glm::X, glm::W, glm::Z, glm::Y)
+#define ywzy swizzle(glm::Y, glm::W, glm::Z, glm::Y)
+#define zwzy swizzle(glm::Z, glm::W, glm::Z, glm::Y)
+#define wwzy swizzle(glm::W, glm::W, glm::Z, glm::Y)
+#define xxwy swizzle(glm::X, glm::X, glm::W, glm::Y)
+#define yxwy swizzle(glm::Y, glm::X, glm::W, glm::Y)
+#define zxwy swizzle(glm::Z, glm::X, glm::W, glm::Y)
+#define wxwy swizzle(glm::W, glm::X, glm::W, glm::Y)
+#define xywy swizzle(glm::X, glm::Y, glm::W, glm::Y)
+#define yywy swizzle(glm::Y, glm::Y, glm::W, glm::Y)
+#define zywy swizzle(glm::Z, glm::Y, glm::W, glm::Y)
+#define wywy swizzle(glm::W, glm::Y, glm::W, glm::Y)
+#define xzwy swizzle(glm::X, glm::Z, glm::W, glm::Y)
+#define yzwy swizzle(glm::Y, glm::Z, glm::W, glm::Y)
+#define zzwy swizzle(glm::Z, glm::Z, glm::W, glm::Y)
+#define wzwy swizzle(glm::W, glm::Z, glm::W, glm::Y)
+#define xwwy swizzle(glm::X, glm::W, glm::W, glm::Y)
+#define ywwy swizzle(glm::Y, glm::W, glm::W, glm::Y)
+#define zwwy swizzle(glm::Z, glm::W, glm::W, glm::Y)
+#define wwwy swizzle(glm::W, glm::W, glm::W, glm::Y)
+#define xxxz swizzle(glm::X, glm::X, glm::X, glm::Z)
+#define yxxz swizzle(glm::Y, glm::X, glm::X, glm::Z)
+#define zxxz swizzle(glm::Z, glm::X, glm::X, glm::Z)
+#define wxxz swizzle(glm::W, glm::X, glm::X, glm::Z)
+#define xyxz swizzle(glm::X, glm::Y, glm::X, glm::Z)
+#define yyxz swizzle(glm::Y, glm::Y, glm::X, glm::Z)
+#define zyxz swizzle(glm::Z, glm::Y, glm::X, glm::Z)
+#define wyxz swizzle(glm::W, glm::Y, glm::X, glm::Z)
+#define xzxz swizzle(glm::X, glm::Z, glm::X, glm::Z)
+#define yzxz swizzle(glm::Y, glm::Z, glm::X, glm::Z)
+#define zzxz swizzle(glm::Z, glm::Z, glm::X, glm::Z)
+#define wzxz swizzle(glm::W, glm::Z, glm::X, glm::Z)
+#define xwxz swizzle(glm::X, glm::W, glm::X, glm::Z)
+#define ywxz swizzle(glm::Y, glm::W, glm::X, glm::Z)
+#define zwxz swizzle(glm::Z, glm::W, glm::X, glm::Z)
+#define wwxz swizzle(glm::W, glm::W, glm::X, glm::Z)
+#define xxyz swizzle(glm::X, glm::X, glm::Y, glm::Z)
+#define yxyz swizzle(glm::Y, glm::X, glm::Y, glm::Z)
+#define zxyz swizzle(glm::Z, glm::X, glm::Y, glm::Z)
+#define wxyz swizzle(glm::W, glm::X, glm::Y, glm::Z)
+#define xyyz swizzle(glm::X, glm::Y, glm::Y, glm::Z)
+#define yyyz swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
+#define zyyz swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
+#define wyyz swizzle(glm::W, glm::Y, glm::Y, glm::Z)
+#define xzyz swizzle(glm::X, glm::Z, glm::Y, glm::Z)
+#define yzyz swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
+#define zzyz swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
+#define wzyz swizzle(glm::W, glm::Z, glm::Y, glm::Z)
+#define xwyz swizzle(glm::X, glm::W, glm::Y, glm::Z)
+#define ywyz swizzle(glm::Y, glm::W, glm::Y, glm::Z)
+#define zwyz swizzle(glm::Z, glm::W, glm::Y, glm::Z)
+#define wwyz swizzle(glm::W, glm::W, glm::Y, glm::Z)
+#define xxzz swizzle(glm::X, glm::X, glm::Z, glm::Z)
+#define yxzz swizzle(glm::Y, glm::X, glm::Z, glm::Z)
+#define zxzz swizzle(glm::Z, glm::X, glm::Z, glm::Z)
+#define wxzz swizzle(glm::W, glm::X, glm::Z, glm::Z)
+#define xyzz swizzle(glm::X, glm::Y, glm::Z, glm::Z)
+#define yyzz swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
+#define zyzz swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
+#define wyzz swizzle(glm::W, glm::Y, glm::Z, glm::Z)
+#define xzzz swizzle(glm::X, glm::Z, glm::Z, glm::Z)
+#define yzzz swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
+#define zzzz swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
+#define wzzz swizzle(glm::W, glm::Z, glm::Z, glm::Z)
+#define xwzz swizzle(glm::X, glm::W, glm::Z, glm::Z)
+#define ywzz swizzle(glm::Y, glm::W, glm::Z, glm::Z)
+#define zwzz swizzle(glm::Z, glm::W, glm::Z, glm::Z)
+#define wwzz swizzle(glm::W, glm::W, glm::Z, glm::Z)
+#define xxwz swizzle(glm::X, glm::X, glm::W, glm::Z)
+#define yxwz swizzle(glm::Y, glm::X, glm::W, glm::Z)
+#define zxwz swizzle(glm::Z, glm::X, glm::W, glm::Z)
+#define wxwz swizzle(glm::W, glm::X, glm::W, glm::Z)
+#define xywz swizzle(glm::X, glm::Y, glm::W, glm::Z)
+#define yywz swizzle(glm::Y, glm::Y, glm::W, glm::Z)
+#define zywz swizzle(glm::Z, glm::Y, glm::W, glm::Z)
+#define wywz swizzle(glm::W, glm::Y, glm::W, glm::Z)
+#define xzwz swizzle(glm::X, glm::Z, glm::W, glm::Z)
+#define yzwz swizzle(glm::Y, glm::Z, glm::W, glm::Z)
+#define zzwz swizzle(glm::Z, glm::Z, glm::W, glm::Z)
+#define wzwz swizzle(glm::W, glm::Z, glm::W, glm::Z)
+#define xwwz swizzle(glm::X, glm::W, glm::W, glm::Z)
+#define ywwz swizzle(glm::Y, glm::W, glm::W, glm::Z)
+#define zwwz swizzle(glm::Z, glm::W, glm::W, glm::Z)
+#define wwwz swizzle(glm::W, glm::W, glm::W, glm::Z)
+#define xxxw swizzle(glm::X, glm::X, glm::X, glm::W)
+#define yxxw swizzle(glm::Y, glm::X, glm::X, glm::W)
+#define zxxw swizzle(glm::Z, glm::X, glm::X, glm::W)
+#define wxxw swizzle(glm::W, glm::X, glm::X, glm::W)
+#define xyxw swizzle(glm::X, glm::Y, glm::X, glm::W)
+#define yyxw swizzle(glm::Y, glm::Y, glm::X, glm::W)
+#define zyxw swizzle(glm::Z, glm::Y, glm::X, glm::W)
+#define wyxw swizzle(glm::W, glm::Y, glm::X, glm::W)
+#define xzxw swizzle(glm::X, glm::Z, glm::X, glm::W)
+#define yzxw swizzle(glm::Y, glm::Z, glm::X, glm::W)
+#define zzxw swizzle(glm::Z, glm::Z, glm::X, glm::W)
+#define wzxw swizzle(glm::W, glm::Z, glm::X, glm::W)
+#define xwxw swizzle(glm::X, glm::W, glm::X, glm::W)
+#define ywxw swizzle(glm::Y, glm::W, glm::X, glm::W)
+#define zwxw swizzle(glm::Z, glm::W, glm::X, glm::W)
+#define wwxw swizzle(glm::W, glm::W, glm::X, glm::W)
+#define xxyw swizzle(glm::X, glm::X, glm::Y, glm::W)
+#define yxyw swizzle(glm::Y, glm::X, glm::Y, glm::W)
+#define zxyw swizzle(glm::Z, glm::X, glm::Y, glm::W)
+#define wxyw swizzle(glm::W, glm::X, glm::Y, glm::W)
+#define xyyw swizzle(glm::X, glm::Y, glm::Y, glm::W)
+#define yyyw swizzle(glm::Y, glm::Y, glm::Y, glm::W)
+#define zyyw swizzle(glm::Z, glm::Y, glm::Y, glm::W)
+#define wyyw swizzle(glm::W, glm::Y, glm::Y, glm::W)
+#define xzyw swizzle(glm::X, glm::Z, glm::Y, glm::W)
+#define yzyw swizzle(glm::Y, glm::Z, glm::Y, glm::W)
+#define zzyw swizzle(glm::Z, glm::Z, glm::Y, glm::W)
+#define wzyw swizzle(glm::W, glm::Z, glm::Y, glm::W)
+#define xwyw swizzle(glm::X, glm::W, glm::Y, glm::W)
+#define ywyw swizzle(glm::Y, glm::W, glm::Y, glm::W)
+#define zwyw swizzle(glm::Z, glm::W, glm::Y, glm::W)
+#define wwyw swizzle(glm::W, glm::W, glm::Y, glm::W)
+#define xxzw swizzle(glm::X, glm::X, glm::Z, glm::W)
+#define yxzw swizzle(glm::Y, glm::X, glm::Z, glm::W)
+#define zxzw swizzle(glm::Z, glm::X, glm::Z, glm::W)
+#define wxzw swizzle(glm::W, glm::X, glm::Z, glm::W)
+#define xyzw swizzle(glm::X, glm::Y, glm::Z, glm::W)
+#define yyzw swizzle(glm::Y, glm::Y, glm::Z, glm::W)
+#define zyzw swizzle(glm::Z, glm::Y, glm::Z, glm::W)
+#define wyzw swizzle(glm::W, glm::Y, glm::Z, glm::W)
+#define xzzw swizzle(glm::X, glm::Z, glm::Z, glm::W)
+#define yzzw swizzle(glm::Y, glm::Z, glm::Z, glm::W)
+#define zzzw swizzle(glm::Z, glm::Z, glm::Z, glm::W)
+#define wzzw swizzle(glm::W, glm::Z, glm::Z, glm::W)
+#define xwzw swizzle(glm::X, glm::W, glm::Z, glm::W)
+#define ywzw swizzle(glm::Y, glm::W, glm::Z, glm::W)
+#define zwzw swizzle(glm::Z, glm::W, glm::Z, glm::W)
+#define wwzw swizzle(glm::W, glm::W, glm::Z, glm::W)
+#define xxww swizzle(glm::X, glm::X, glm::W, glm::W)
+#define yxww swizzle(glm::Y, glm::X, glm::W, glm::W)
+#define zxww swizzle(glm::Z, glm::X, glm::W, glm::W)
+#define wxww swizzle(glm::W, glm::X, glm::W, glm::W)
+#define xyww swizzle(glm::X, glm::Y, glm::W, glm::W)
+#define yyww swizzle(glm::Y, glm::Y, glm::W, glm::W)
+#define zyww swizzle(glm::Z, glm::Y, glm::W, glm::W)
+#define wyww swizzle(glm::W, glm::Y, glm::W, glm::W)
+#define xzww swizzle(glm::X, glm::Z, glm::W, glm::W)
+#define yzww swizzle(glm::Y, glm::Z, glm::W, glm::W)
+#define zzww swizzle(glm::Z, glm::Z, glm::W, glm::W)
+#define wzww swizzle(glm::W, glm::Z, glm::W, glm::W)
+#define xwww swizzle(glm::X, glm::W, glm::W, glm::W)
+#define ywww swizzle(glm::Y, glm::W, glm::W, glm::W)
+#define zwww swizzle(glm::Z, glm::W, glm::W, glm::W)
+#define wwww swizzle(glm::W, glm::W, glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_SWIZZLE_RGBA) || defined(GLM_SWIZZLE))
+
+#define rrrr swizzle(glm::X, glm::X, glm::X, glm::X)
+#define grrr swizzle(glm::Y, glm::X, glm::X, glm::X)
+#define brrr swizzle(glm::Z, glm::X, glm::X, glm::X)
+#define arrr swizzle(glm::W, glm::X, glm::X, glm::X)
+#define rgrr swizzle(glm::X, glm::Y, glm::X, glm::X)
+#define ggrr swizzle(glm::Y, glm::Y, glm::X, glm::X)
+#define bgrr swizzle(glm::Z, glm::Y, glm::X, glm::X)
+#define agrr swizzle(glm::W, glm::Y, glm::X, glm::X)
+#define rbrr swizzle(glm::X, glm::Z, glm::X, glm::X)
+#define gbrr swizzle(glm::Y, glm::Z, glm::X, glm::X)
+#define bbrr swizzle(glm::Z, glm::Z, glm::X, glm::X)
+#define abrr swizzle(glm::W, glm::Z, glm::X, glm::X)
+#define rarr swizzle(glm::X, glm::W, glm::X, glm::X)
+#define garr swizzle(glm::Y, glm::W, glm::X, glm::X)
+#define barr swizzle(glm::Z, glm::W, glm::X, glm::X)
+#define aarr swizzle(glm::W, glm::W, glm::X, glm::X)
+#define rrgr swizzle(glm::X, glm::X, glm::Y, glm::X)
+#define grgr swizzle(glm::Y, glm::X, glm::Y, glm::X)
+#define brgr swizzle(glm::Z, glm::X, glm::Y, glm::X)
+#define argr swizzle(glm::W, glm::X, glm::Y, glm::X)
+#define rggr swizzle(glm::X, glm::Y, glm::Y, glm::X)
+#define gggr swizzle(glm::Y, glm::Y, glm::Y, glm::X)
+#define bggr swizzle(glm::Z, glm::Y, glm::Y, glm::X)
+#define aggr swizzle(glm::W, glm::Y, glm::Y, glm::X)
+#define rbgr swizzle(glm::X, glm::Z, glm::Y, glm::X)
+#define gbgr swizzle(glm::Y, glm::Z, glm::Y, glm::X)
+#define bbgr swizzle(glm::Z, glm::Z, glm::Y, glm::X)
+#define abgr swizzle(glm::W, glm::Z, glm::Y, glm::X)
+#define ragr swizzle(glm::X, glm::W, glm::Y, glm::X)
+#define gagr swizzle(glm::Y, glm::W, glm::Y, glm::X)
+#define bagr swizzle(glm::Z, glm::W, glm::Y, glm::X)
+#define aagr swizzle(glm::W, glm::W, glm::Y, glm::X)
+#define rrbr swizzle(glm::X, glm::X, glm::Z, glm::X)
+#define grbr swizzle(glm::Y, glm::X, glm::Z, glm::X)
+#define brbr swizzle(glm::Z, glm::X, glm::Z, glm::X)
+#define arbr swizzle(glm::W, glm::X, glm::Z, glm::X)
+#define rgbr swizzle(glm::X, glm::Y, glm::Z, glm::X)
+#define ggbr swizzle(glm::Y, glm::Y, glm::Z, glm::X)
+#define bgbr swizzle(glm::Z, glm::Y, glm::Z, glm::X)
+#define agbr swizzle(glm::W, glm::Y, glm::Z, glm::X)
+#define rbbr swizzle(glm::X, glm::Z, glm::Z, glm::X)
+#define gbbr swizzle(glm::Y, glm::Z, glm::Z, glm::X)
+#define bbbr swizzle(glm::Z, glm::Z, glm::Z, glm::X)
+#define abbr swizzle(glm::W, glm::Z, glm::Z, glm::X)
+#define rabr swizzle(glm::X, glm::W, glm::Z, glm::X)
+#define gabr swizzle(glm::Y, glm::W, glm::Z, glm::X)
+#define babr swizzle(glm::Z, glm::W, glm::Z, glm::X)
+#define aabr swizzle(glm::W, glm::W, glm::Z, glm::X)
+#define rrar swizzle(glm::X, glm::X, glm::W, glm::X)
+#define grar swizzle(glm::Y, glm::X, glm::W, glm::X)
+#define brar swizzle(glm::Z, glm::X, glm::W, glm::X)
+#define arar swizzle(glm::W, glm::X, glm::W, glm::X)
+#define rgar swizzle(glm::X, glm::Y, glm::W, glm::X)
+#define ggar swizzle(glm::Y, glm::Y, glm::W, glm::X)
+#define bgar swizzle(glm::Z, glm::Y, glm::W, glm::X)
+#define agar swizzle(glm::W, glm::Y, glm::W, glm::X)
+#define rbar swizzle(glm::X, glm::Z, glm::W, glm::X)
+#define gbar swizzle(glm::Y, glm::Z, glm::W, glm::X)
+#define bbar swizzle(glm::Z, glm::Z, glm::W, glm::X)
+#define abar swizzle(glm::W, glm::Z, glm::W, glm::X)
+#define raar swizzle(glm::X, glm::W, glm::W, glm::X)
+#define gaar swizzle(glm::Y, glm::W, glm::W, glm::X)
+#define baar swizzle(glm::Z, glm::W, glm::W, glm::X)
+#define aaar swizzle(glm::W, glm::W, glm::W, glm::X)
+#define rrrg swizzle(glm::X, glm::X, glm::X, glm::Y)
+#define grrg swizzle(glm::Y, glm::X, glm::X, glm::Y)
+#define brrg swizzle(glm::Z, glm::X, glm::X, glm::Y)
+#define arrg swizzle(glm::W, glm::X, glm::X, glm::Y)
+#define rgrg swizzle(glm::X, glm::Y, glm::X, glm::Y)
+#define ggrg swizzle(glm::Y, glm::Y, glm::X, glm::Y)
+#define bgrg swizzle(glm::Z, glm::Y, glm::X, glm::Y)
+#define agrg swizzle(glm::W, glm::Y, glm::X, glm::Y)
+#define rbrg swizzle(glm::X, glm::Z, glm::X, glm::Y)
+#define gbrg swizzle(glm::Y, glm::Z, glm::X, glm::Y)
+#define bbrg swizzle(glm::Z, glm::Z, glm::X, glm::Y)
+#define abrg swizzle(glm::W, glm::Z, glm::X, glm::Y)
+#define rarg swizzle(glm::X, glm::W, glm::X, glm::Y)
+#define garg swizzle(glm::Y, glm::W, glm::X, glm::Y)
+#define barg swizzle(glm::Z, glm::W, glm::X, glm::Y)
+#define aarg swizzle(glm::W, glm::W, glm::X, glm::Y)
+#define rrgg swizzle(glm::X, glm::X, glm::Y, glm::Y)
+#define grgg swizzle(glm::Y, glm::X, glm::Y, glm::Y)
+#define brgg swizzle(glm::Z, glm::X, glm::Y, glm::Y)
+#define argg swizzle(glm::W, glm::X, glm::Y, glm::Y)
+#define rggg swizzle(glm::X, glm::Y, glm::Y, glm::Y)
+#define gggg swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
+#define bggg swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
+#define aggg swizzle(glm::W, glm::Y, glm::Y, glm::Y)
+#define rbgg swizzle(glm::X, glm::Z, glm::Y, glm::Y)
+#define gbgg swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
+#define bbgg swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
+#define abgg swizzle(glm::W, glm::Z, glm::Y, glm::Y)
+#define ragg swizzle(glm::X, glm::W, glm::Y, glm::Y)
+#define gagg swizzle(glm::Y, glm::W, glm::Y, glm::Y)
+#define bagg swizzle(glm::Z, glm::W, glm::Y, glm::Y)
+#define aagg swizzle(glm::W, glm::W, glm::Y, glm::Y)
+#define rrbg swizzle(glm::X, glm::X, glm::Z, glm::Y)
+#define grbg swizzle(glm::Y, glm::X, glm::Z, glm::Y)
+#define brbg swizzle(glm::Z, glm::X, glm::Z, glm::Y)
+#define arbg swizzle(glm::W, glm::X, glm::Z, glm::Y)
+#define rgbg swizzle(glm::X, glm::Y, glm::Z, glm::Y)
+#define ggbg swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
+#define bgbg swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
+#define agbg swizzle(glm::W, glm::Y, glm::Z, glm::Y)
+#define rbbg swizzle(glm::X, glm::Z, glm::Z, glm::Y)
+#define gbbg swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
+#define bbbg swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
+#define abbg swizzle(glm::W, glm::Z, glm::Z, glm::Y)
+#define rabg swizzle(glm::X, glm::W, glm::Z, glm::Y)
+#define gabg swizzle(glm::Y, glm::W, glm::Z, glm::Y)
+#define babg swizzle(glm::Z, glm::W, glm::Z, glm::Y)
+#define aabg swizzle(glm::W, glm::W, glm::Z, glm::Y)
+#define rrag swizzle(glm::X, glm::X, glm::W, glm::Y)
+#define grag swizzle(glm::Y, glm::X, glm::W, glm::Y)
+#define brag swizzle(glm::Z, glm::X, glm::W, glm::Y)
+#define arag swizzle(glm::W, glm::X, glm::W, glm::Y)
+#define rgag swizzle(glm::X, glm::Y, glm::W, glm::Y)
+#define ggag swizzle(glm::Y, glm::Y, glm::W, glm::Y)
+#define bgag swizzle(glm::Z, glm::Y, glm::W, glm::Y)
+#define agag swizzle(glm::W, glm::Y, glm::W, glm::Y)
+#define rbag swizzle(glm::X, glm::Z, glm::W, glm::Y)
+#define gbag swizzle(glm::Y, glm::Z, glm::W, glm::Y)
+#define bbag swizzle(glm::Z, glm::Z, glm::W, glm::Y)
+#define abag swizzle(glm::W, glm::Z, glm::W, glm::Y)
+#define raag swizzle(glm::X, glm::W, glm::W, glm::Y)
+#define gaag swizzle(glm::Y, glm::W, glm::W, glm::Y)
+#define baag swizzle(glm::Z, glm::W, glm::W, glm::Y)
+#define aaag swizzle(glm::W, glm::W, glm::W, glm::Y)
+#define rrrb swizzle(glm::X, glm::X, glm::X, glm::Z)
+#define grrb swizzle(glm::Y, glm::X, glm::X, glm::Z)
+#define brrb swizzle(glm::Z, glm::X, glm::X, glm::Z)
+#define arrb swizzle(glm::W, glm::X, glm::X, glm::Z)
+#define rgrb swizzle(glm::X, glm::Y, glm::X, glm::Z)
+#define ggrb swizzle(glm::Y, glm::Y, glm::X, glm::Z)
+#define bgrb swizzle(glm::Z, glm::Y, glm::X, glm::Z)
+#define agrb swizzle(glm::W, glm::Y, glm::X, glm::Z)
+#define rbrb swizzle(glm::X, glm::Z, glm::X, glm::Z)
+#define gbrb swizzle(glm::Y, glm::Z, glm::X, glm::Z)
+#define bbrb swizzle(glm::Z, glm::Z, glm::X, glm::Z)
+#define abrb swizzle(glm::W, glm::Z, glm::X, glm::Z)
+#define rarb swizzle(glm::X, glm::W, glm::X, glm::Z)
+#define garb swizzle(glm::Y, glm::W, glm::X, glm::Z)
+#define barb swizzle(glm::Z, glm::W, glm::X, glm::Z)
+#define aarb swizzle(glm::W, glm::W, glm::X, glm::Z)
+#define rrgb swizzle(glm::X, glm::X, glm::Y, glm::Z)
+#define grgb swizzle(glm::Y, glm::X, glm::Y, glm::Z)
+#define brgb swizzle(glm::Z, glm::X, glm::Y, glm::Z)
+#define argb swizzle(glm::W, glm::X, glm::Y, glm::Z)
+#define rggb swizzle(glm::X, glm::Y, glm::Y, glm::Z)
+#define gggb swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
+#define bggb swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
+#define aggb swizzle(glm::W, glm::Y, glm::Y, glm::Z)
+#define rbgb swizzle(glm::X, glm::Z, glm::Y, glm::Z)
+#define gbgb swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
+#define bbgb swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
+#define abgb swizzle(glm::W, glm::Z, glm::Y, glm::Z)
+#define ragb swizzle(glm::X, glm::W, glm::Y, glm::Z)
+#define gagb swizzle(glm::Y, glm::W, glm::Y, glm::Z)
+#define bagb swizzle(glm::Z, glm::W, glm::Y, glm::Z)
+#define aagb swizzle(glm::W, glm::W, glm::Y, glm::Z)
+#define rrbb swizzle(glm::X, glm::X, glm::Z, glm::Z)
+#define grbb swizzle(glm::Y, glm::X, glm::Z, glm::Z)
+#define brbb swizzle(glm::Z, glm::X, glm::Z, glm::Z)
+#define arbb swizzle(glm::W, glm::X, glm::Z, glm::Z)
+#define rgbb swizzle(glm::X, glm::Y, glm::Z, glm::Z)
+#define ggbb swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
+#define bgbb swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
+#define agbb swizzle(glm::W, glm::Y, glm::Z, glm::Z)
+#define rbbb swizzle(glm::X, glm::Z, glm::Z, glm::Z)
+#define gbbb swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
+#define bbbb swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
+#define abbb swizzle(glm::W, glm::Z, glm::Z, glm::Z)
+#define rabb swizzle(glm::X, glm::W, glm::Z, glm::Z)
+#define gabb swizzle(glm::Y, glm::W, glm::Z, glm::Z)
+#define babb swizzle(glm::Z, glm::W, glm::Z, glm::Z)
+#define aabb swizzle(glm::W, glm::W, glm::Z, glm::Z)
+#define rrab swizzle(glm::X, glm::X, glm::W, glm::Z)
+#define grab swizzle(glm::Y, glm::X, glm::W, glm::Z)
+#define brab swizzle(glm::Z, glm::X, glm::W, glm::Z)
+#define arab swizzle(glm::W, glm::X, glm::W, glm::Z)
+#define rgab swizzle(glm::X, glm::Y, glm::W, glm::Z)
+#define ggab swizzle(glm::Y, glm::Y, glm::W, glm::Z)
+#define bgab swizzle(glm::Z, glm::Y, glm::W, glm::Z)
+#define agab swizzle(glm::W, glm::Y, glm::W, glm::Z)
+#define rbab swizzle(glm::X, glm::Z, glm::W, glm::Z)
+#define gbab swizzle(glm::Y, glm::Z, glm::W, glm::Z)
+#define bbab swizzle(glm::Z, glm::Z, glm::W, glm::Z)
+#define abab swizzle(glm::W, glm::Z, glm::W, glm::Z)
+#define raab swizzle(glm::X, glm::W, glm::W, glm::Z)
+#define gaab swizzle(glm::Y, glm::W, glm::W, glm::Z)
+#define baab swizzle(glm::Z, glm::W, glm::W, glm::Z)
+#define aaab swizzle(glm::W, glm::W, glm::W, glm::Z)
+#define rrra swizzle(glm::X, glm::X, glm::X, glm::W)
+#define grra swizzle(glm::Y, glm::X, glm::X, glm::W)
+#define brra swizzle(glm::Z, glm::X, glm::X, glm::W)
+#define arra swizzle(glm::W, glm::X, glm::X, glm::W)
+#define rgra swizzle(glm::X, glm::Y, glm::X, glm::W)
+#define ggra swizzle(glm::Y, glm::Y, glm::X, glm::W)
+#define bgra swizzle(glm::Z, glm::Y, glm::X, glm::W)
+#define agra swizzle(glm::W, glm::Y, glm::X, glm::W)
+#define rbra swizzle(glm::X, glm::Z, glm::X, glm::W)
+#define gbra swizzle(glm::Y, glm::Z, glm::X, glm::W)
+#define bbra swizzle(glm::Z, glm::Z, glm::X, glm::W)
+#define abra swizzle(glm::W, glm::Z, glm::X, glm::W)
+#define rara swizzle(glm::X, glm::W, glm::X, glm::W)
+#define gara swizzle(glm::Y, glm::W, glm::X, glm::W)
+#define bara swizzle(glm::Z, glm::W, glm::X, glm::W)
+#define aara swizzle(glm::W, glm::W, glm::X, glm::W)
+#define rrga swizzle(glm::X, glm::X, glm::Y, glm::W)
+#define grga swizzle(glm::Y, glm::X, glm::Y, glm::W)
+#define brga swizzle(glm::Z, glm::X, glm::Y, glm::W)
+#define arga swizzle(glm::W, glm::X, glm::Y, glm::W)
+#define rgga swizzle(glm::X, glm::Y, glm::Y, glm::W)
+#define ggga swizzle(glm::Y, glm::Y, glm::Y, glm::W)
+#define bgga swizzle(glm::Z, glm::Y, glm::Y, glm::W)
+#define agga swizzle(glm::W, glm::Y, glm::Y, glm::W)
+#define rbga swizzle(glm::X, glm::Z, glm::Y, glm::W)
+#define gbga swizzle(glm::Y, glm::Z, glm::Y, glm::W)
+#define bbga swizzle(glm::Z, glm::Z, glm::Y, glm::W)
+#define abga swizzle(glm::W, glm::Z, glm::Y, glm::W)
+#define raga swizzle(glm::X, glm::W, glm::Y, glm::W)
+#define gaga swizzle(glm::Y, glm::W, glm::Y, glm::W)
+#define baga swizzle(glm::Z, glm::W, glm::Y, glm::W)
+#define aaga swizzle(glm::W, glm::W, glm::Y, glm::W)
+#define rrba swizzle(glm::X, glm::X, glm::Z, glm::W)
+#define grba swizzle(glm::Y, glm::X, glm::Z, glm::W)
+#define brba swizzle(glm::Z, glm::X, glm::Z, glm::W)
+#define arba swizzle(glm::W, glm::X, glm::Z, glm::W)
+#define rgba swizzle(glm::X, glm::Y, glm::Z, glm::W)
+#define ggba swizzle(glm::Y, glm::Y, glm::Z, glm::W)
+#define bgba swizzle(glm::Z, glm::Y, glm::Z, glm::W)
+#define agba swizzle(glm::W, glm::Y, glm::Z, glm::W)
+#define rbba swizzle(glm::X, glm::Z, glm::Z, glm::W)
+#define gbba swizzle(glm::Y, glm::Z, glm::Z, glm::W)
+#define bbba swizzle(glm::Z, glm::Z, glm::Z, glm::W)
+#define abba swizzle(glm::W, glm::Z, glm::Z, glm::W)
+#define raba swizzle(glm::X, glm::W, glm::Z, glm::W)
+#define gaba swizzle(glm::Y, glm::W, glm::Z, glm::W)
+#define baba swizzle(glm::Z, glm::W, glm::Z, glm::W)
+#define aaba swizzle(glm::W, glm::W, glm::Z, glm::W)
+#define rraa swizzle(glm::X, glm::X, glm::W, glm::W)
+#define graa swizzle(glm::Y, glm::X, glm::W, glm::W)
+#define braa swizzle(glm::Z, glm::X, glm::W, glm::W)
+#define araa swizzle(glm::W, glm::X, glm::W, glm::W)
+#define rgaa swizzle(glm::X, glm::Y, glm::W, glm::W)
+#define ggaa swizzle(glm::Y, glm::Y, glm::W, glm::W)
+#define bgaa swizzle(glm::Z, glm::Y, glm::W, glm::W)
+#define agaa swizzle(glm::W, glm::Y, glm::W, glm::W)
+#define rbaa swizzle(glm::X, glm::Z, glm::W, glm::W)
+#define gbaa swizzle(glm::Y, glm::Z, glm::W, glm::W)
+#define bbaa swizzle(glm::Z, glm::Z, glm::W, glm::W)
+#define abaa swizzle(glm::W, glm::Z, glm::W, glm::W)
+#define raaa swizzle(glm::X, glm::W, glm::W, glm::W)
+#define gaaa swizzle(glm::Y, glm::W, glm::W, glm::W)
+#define baaa swizzle(glm::Z, glm::W, glm::W, glm::W)
+#define aaaa swizzle(glm::W, glm::W, glm::W, glm::W)
+
+#endif
+
+#if(defined(GLM_FORCE_SWIZZLE_STPQ) || defined(GLM_SWIZZLE))
+
+#define ssss swizzle(glm::X, glm::X, glm::X, glm::X)
+#define tsss swizzle(glm::Y, glm::X, glm::X, glm::X)
+#define psss swizzle(glm::Z, glm::X, glm::X, glm::X)
+#define qsss swizzle(glm::W, glm::X, glm::X, glm::X)
+#define stss swizzle(glm::X, glm::Y, glm::X, glm::X)
+#define ttss swizzle(glm::Y, glm::Y, glm::X, glm::X)
+#define ptss swizzle(glm::Z, glm::Y, glm::X, glm::X)
+#define qtss swizzle(glm::W, glm::Y, glm::X, glm::X)
+#define spss swizzle(glm::X, glm::Z, glm::X, glm::X)
+#define tpss swizzle(glm::Y, glm::Z, glm::X, glm::X)
+#define ppss swizzle(glm::Z, glm::Z, glm::X, glm::X)
+#define qpss swizzle(glm::W, glm::Z, glm::X, glm::X)
+#define sqss swizzle(glm::X, glm::W, glm::X, glm::X)
+#define tqss swizzle(glm::Y, glm::W, glm::X, glm::X)
+#define pqss swizzle(glm::Z, glm::W, glm::X, glm::X)
+#define qqss swizzle(glm::W, glm::W, glm::X, glm::X)
+#define ssts swizzle(glm::X, glm::X, glm::Y, glm::X)
+#define tsts swizzle(glm::Y, glm::X, glm::Y, glm::X)
+#define psts swizzle(glm::Z, glm::X, glm::Y, glm::X)
+#define qsts swizzle(glm::W, glm::X, glm::Y, glm::X)
+#define stts swizzle(glm::X, glm::Y, glm::Y, glm::X)
+#define ttts swizzle(glm::Y, glm::Y, glm::Y, glm::X)
+#define ptts swizzle(glm::Z, glm::Y, glm::Y, glm::X)
+#define qtts swizzle(glm::W, glm::Y, glm::Y, glm::X)
+#define spts swizzle(glm::X, glm::Z, glm::Y, glm::X)
+#define tpts swizzle(glm::Y, glm::Z, glm::Y, glm::X)
+#define ppts swizzle(glm::Z, glm::Z, glm::Y, glm::X)
+#define qpts swizzle(glm::W, glm::Z, glm::Y, glm::X)
+#define sqts swizzle(glm::X, glm::W, glm::Y, glm::X)
+#define tqts swizzle(glm::Y, glm::W, glm::Y, glm::X)
+#define pqts swizzle(glm::Z, glm::W, glm::Y, glm::X)
+#define qqts swizzle(glm::W, glm::W, glm::Y, glm::X)
+#define ssps swizzle(glm::X, glm::X, glm::Z, glm::X)
+#define tsps swizzle(glm::Y, glm::X, glm::Z, glm::X)
+#define psps swizzle(glm::Z, glm::X, glm::Z, glm::X)
+#define qsps swizzle(glm::W, glm::X, glm::Z, glm::X)
+#define stps swizzle(glm::X, glm::Y, glm::Z, glm::X)
+#define ttps swizzle(glm::Y, glm::Y, glm::Z, glm::X)
+#define ptps swizzle(glm::Z, glm::Y, glm::Z, glm::X)
+#define qtps swizzle(glm::W, glm::Y, glm::Z, glm::X)
+#define spps swizzle(glm::X, glm::Z, glm::Z, glm::X)
+#define tpps swizzle(glm::Y, glm::Z, glm::Z, glm::X)
+#define ppps swizzle(glm::Z, glm::Z, glm::Z, glm::X)
+#define qpps swizzle(glm::W, glm::Z, glm::Z, glm::X)
+#define sqps swizzle(glm::X, glm::W, glm::Z, glm::X)
+#define tqps swizzle(glm::Y, glm::W, glm::Z, glm::X)
+#define pqps swizzle(glm::Z, glm::W, glm::Z, glm::X)
+#define qqps swizzle(glm::W, glm::W, glm::Z, glm::X)
+#define ssqs swizzle(glm::X, glm::X, glm::W, glm::X)
+#define tsqs swizzle(glm::Y, glm::X, glm::W, glm::X)
+#define psqs swizzle(glm::Z, glm::X, glm::W, glm::X)
+#define qsqs swizzle(glm::W, glm::X, glm::W, glm::X)
+#define stqs swizzle(glm::X, glm::Y, glm::W, glm::X)
+#define ttqs swizzle(glm::Y, glm::Y, glm::W, glm::X)
+#define ptqs swizzle(glm::Z, glm::Y, glm::W, glm::X)
+#define qtqs swizzle(glm::W, glm::Y, glm::W, glm::X)
+#define spqs swizzle(glm::X, glm::Z, glm::W, glm::X)
+#define tpqs swizzle(glm::Y, glm::Z, glm::W, glm::X)
+#define ppqs swizzle(glm::Z, glm::Z, glm::W, glm::X)
+#define qpqs swizzle(glm::W, glm::Z, glm::W, glm::X)
+#define sqqs swizzle(glm::X, glm::W, glm::W, glm::X)
+#define tqqs swizzle(glm::Y, glm::W, glm::W, glm::X)
+#define pqqs swizzle(glm::Z, glm::W, glm::W, glm::X)
+#define qqqs swizzle(glm::W, glm::W, glm::W, glm::X)
+#define ssst swizzle(glm::X, glm::X, glm::X, glm::Y)
+#define tsst swizzle(glm::Y, glm::X, glm::X, glm::Y)
+#define psst swizzle(glm::Z, glm::X, glm::X, glm::Y)
+#define qsst swizzle(glm::W, glm::X, glm::X, glm::Y)
+#define stst swizzle(glm::X, glm::Y, glm::X, glm::Y)
+#define ttst swizzle(glm::Y, glm::Y, glm::X, glm::Y)
+#define ptst swizzle(glm::Z, glm::Y, glm::X, glm::Y)
+#define qtst swizzle(glm::W, glm::Y, glm::X, glm::Y)
+#define spst swizzle(glm::X, glm::Z, glm::X, glm::Y)
+#define tpst swizzle(glm::Y, glm::Z, glm::X, glm::Y)
+#define ppst swizzle(glm::Z, glm::Z, glm::X, glm::Y)
+#define qpst swizzle(glm::W, glm::Z, glm::X, glm::Y)
+#define sqst swizzle(glm::X, glm::W, glm::X, glm::Y)
+#define tqst swizzle(glm::Y, glm::W, glm::X, glm::Y)
+#define pqst swizzle(glm::Z, glm::W, glm::X, glm::Y)
+#define qqst swizzle(glm::W, glm::W, glm::X, glm::Y)
+#define sstt swizzle(glm::X, glm::X, glm::Y, glm::Y)
+#define tstt swizzle(glm::Y, glm::X, glm::Y, glm::Y)
+#define pstt swizzle(glm::Z, glm::X, glm::Y, glm::Y)
+#define qstt swizzle(glm::W, glm::X, glm::Y, glm::Y)
+#define sttt swizzle(glm::X, glm::Y, glm::Y, glm::Y)
+#define tttt swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
+#define pttt swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
+#define qttt swizzle(glm::W, glm::Y, glm::Y, glm::Y)
+#define sptt swizzle(glm::X, glm::Z, glm::Y, glm::Y)
+#define tptt swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
+#define pptt swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
+#define qptt swizzle(glm::W, glm::Z, glm::Y, glm::Y)
+#define sqtt swizzle(glm::X, glm::W, glm::Y, glm::Y)
+#define tqtt swizzle(glm::Y, glm::W, glm::Y, glm::Y)
+#define pqtt swizzle(glm::Z, glm::W, glm::Y, glm::Y)
+#define qqtt swizzle(glm::W, glm::W, glm::Y, glm::Y)
+#define sspt swizzle(glm::X, glm::X, glm::Z, glm::Y)
+#define tspt swizzle(glm::Y, glm::X, glm::Z, glm::Y)
+#define pspt swizzle(glm::Z, glm::X, glm::Z, glm::Y)
+#define qspt swizzle(glm::W, glm::X, glm::Z, glm::Y)
+#define stpt swizzle(glm::X, glm::Y, glm::Z, glm::Y)
+#define ttpt swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
+#define ptpt swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
+#define qtpt swizzle(glm::W, glm::Y, glm::Z, glm::Y)
+#define sppt swizzle(glm::X, glm::Z, glm::Z, glm::Y)
+#define tppt swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
+#define pppt swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
+#define qppt swizzle(glm::W, glm::Z, glm::Z, glm::Y)
+#define sqpt swizzle(glm::X, glm::W, glm::Z, glm::Y)
+#define tqpt swizzle(glm::Y, glm::W, glm::Z, glm::Y)
+#define pqpt swizzle(glm::Z, glm::W, glm::Z, glm::Y)
+#define qqpt swizzle(glm::W, glm::W, glm::Z, glm::Y)
+#define ssqt swizzle(glm::X, glm::X, glm::W, glm::Y)
+#define tsqt swizzle(glm::Y, glm::X, glm::W, glm::Y)
+#define psqt swizzle(glm::Z, glm::X, glm::W, glm::Y)
+#define qsqt swizzle(glm::W, glm::X, glm::W, glm::Y)
+#define stqt swizzle(glm::X, glm::Y, glm::W, glm::Y)
+#define ttqt swizzle(glm::Y, glm::Y, glm::W, glm::Y)
+#define ptqt swizzle(glm::Z, glm::Y, glm::W, glm::Y)
+#define qtqt swizzle(glm::W, glm::Y, glm::W, glm::Y)
+#define spqt swizzle(glm::X, glm::Z, glm::W, glm::Y)
+#define tpqt swizzle(glm::Y, glm::Z, glm::W, glm::Y)
+#define ppqt swizzle(glm::Z, glm::Z, glm::W, glm::Y)
+#define qpqt swizzle(glm::W, glm::Z, glm::W, glm::Y)
+#define sqqt swizzle(glm::X, glm::W, glm::W, glm::Y)
+#define tqqt swizzle(glm::Y, glm::W, glm::W, glm::Y)
+#define pqqt swizzle(glm::Z, glm::W, glm::W, glm::Y)
+#define qqqt swizzle(glm::W, glm::W, glm::W, glm::Y)
+#define sssp swizzle(glm::X, glm::X, glm::X, glm::Z)
+#define tssp swizzle(glm::Y, glm::X, glm::X, glm::Z)
+#define pssp swizzle(glm::Z, glm::X, glm::X, glm::Z)
+#define qssp swizzle(glm::W, glm::X, glm::X, glm::Z)
+#define stsp swizzle(glm::X, glm::Y, glm::X, glm::Z)
+#define ttsp swizzle(glm::Y, glm::Y, glm::X, glm::Z)
+#define ptsp swizzle(glm::Z, glm::Y, glm::X, glm::Z)
+#define qtsp swizzle(glm::W, glm::Y, glm::X, glm::Z)
+#define spsp swizzle(glm::X, glm::Z, glm::X, glm::Z)
+#define tpsp swizzle(glm::Y, glm::Z, glm::X, glm::Z)
+#define ppsp swizzle(glm::Z, glm::Z, glm::X, glm::Z)
+#define qpsp swizzle(glm::W, glm::Z, glm::X, glm::Z)
+#define sqsp swizzle(glm::X, glm::W, glm::X, glm::Z)
+#define tqsp swizzle(glm::Y, glm::W, glm::X, glm::Z)
+#define pqsp swizzle(glm::Z, glm::W, glm::X, glm::Z)
+#define qqsp swizzle(glm::W, glm::W, glm::X, glm::Z)
+#define sstp swizzle(glm::X, glm::X, glm::Y, glm::Z)
+#define tstp swizzle(glm::Y, glm::X, glm::Y, glm::Z)
+#define pstp swizzle(glm::Z, glm::X, glm::Y, glm::Z)
+#define qstp swizzle(glm::W, glm::X, glm::Y, glm::Z)
+#define sttp swizzle(glm::X, glm::Y, glm::Y, glm::Z)
+#define tttp swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
+#define pttp swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
+#define qttp swizzle(glm::W, glm::Y, glm::Y, glm::Z)
+#define sptp swizzle(glm::X, glm::Z, glm::Y, glm::Z)
+#define tptp swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
+#define pptp swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
+#define qptp swizzle(glm::W, glm::Z, glm::Y, glm::Z)
+#define sqtp swizzle(glm::X, glm::W, glm::Y, glm::Z)
+#define tqtp swizzle(glm::Y, glm::W, glm::Y, glm::Z)
+#define pqtp swizzle(glm::Z, glm::W, glm::Y, glm::Z)
+#define qqtp swizzle(glm::W, glm::W, glm::Y, glm::Z)
+#define sspp swizzle(glm::X, glm::X, glm::Z, glm::Z)
+#define tspp swizzle(glm::Y, glm::X, glm::Z, glm::Z)
+#define pspp swizzle(glm::Z, glm::X, glm::Z, glm::Z)
+#define qspp swizzle(glm::W, glm::X, glm::Z, glm::Z)
+#define stpp swizzle(glm::X, glm::Y, glm::Z, glm::Z)
+#define ttpp swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
+#define ptpp swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
+#define qtpp swizzle(glm::W, glm::Y, glm::Z, glm::Z)
+#define sppp swizzle(glm::X, glm::Z, glm::Z, glm::Z)
+#define tppp swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
+#define pppp swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
+#define qppp swizzle(glm::W, glm::Z, glm::Z, glm::Z)
+#define sqpp swizzle(glm::X, glm::W, glm::Z, glm::Z)
+#define tqpp swizzle(glm::Y, glm::W, glm::Z, glm::Z)
+#define pqpp swizzle(glm::Z, glm::W, glm::Z, glm::Z)
+#define qqpp swizzle(glm::W, glm::W, glm::Z, glm::Z)
+#define ssqp swizzle(glm::X, glm::X, glm::W, glm::Z)
+#define tsqp swizzle(glm::Y, glm::X, glm::W, glm::Z)
+#define psqp swizzle(glm::Z, glm::X, glm::W, glm::Z)
+#define qsqp swizzle(glm::W, glm::X, glm::W, glm::Z)
+#define stqp swizzle(glm::X, glm::Y, glm::W, glm::Z)
+#define ttqp swizzle(glm::Y, glm::Y, glm::W, glm::Z)
+#define ptqp swizzle(glm::Z, glm::Y, glm::W, glm::Z)
+#define qtqp swizzle(glm::W, glm::Y, glm::W, glm::Z)
+#define spqp swizzle(glm::X, glm::Z, glm::W, glm::Z)
+#define tpqp swizzle(glm::Y, glm::Z, glm::W, glm::Z)
+#define ppqp swizzle(glm::Z, glm::Z, glm::W, glm::Z)
+#define qpqp swizzle(glm::W, glm::Z, glm::W, glm::Z)
+#define sqqp swizzle(glm::X, glm::W, glm::W, glm::Z)
+#define tqqp swizzle(glm::Y, glm::W, glm::W, glm::Z)
+#define pqqp swizzle(glm::Z, glm::W, glm::W, glm::Z)
+#define qqqp swizzle(glm::W, glm::W, glm::W, glm::Z)
+#define sssq swizzle(glm::X, glm::X, glm::X, glm::W)
+#define tssq swizzle(glm::Y, glm::X, glm::X, glm::W)
+#define pssq swizzle(glm::Z, glm::X, glm::X, glm::W)
+#define qssq swizzle(glm::W, glm::X, glm::X, glm::W)
+#define stsq swizzle(glm::X, glm::Y, glm::X, glm::W)
+#define ttsq swizzle(glm::Y, glm::Y, glm::X, glm::W)
+#define ptsq swizzle(glm::Z, glm::Y, glm::X, glm::W)
+#define qtsq swizzle(glm::W, glm::Y, glm::X, glm::W)
+#define spsq swizzle(glm::X, glm::Z, glm::X, glm::W)
+#define tpsq swizzle(glm::Y, glm::Z, glm::X, glm::W)
+#define ppsq swizzle(glm::Z, glm::Z, glm::X, glm::W)
+#define qpsq swizzle(glm::W, glm::Z, glm::X, glm::W)
+#define sqsq swizzle(glm::X, glm::W, glm::X, glm::W)
+#define tqsq swizzle(glm::Y, glm::W, glm::X, glm::W)
+#define pqsq swizzle(glm::Z, glm::W, glm::X, glm::W)
+#define qqsq swizzle(glm::W, glm::W, glm::X, glm::W)
+#define sstq swizzle(glm::X, glm::X, glm::Y, glm::W)
+#define tstq swizzle(glm::Y, glm::X, glm::Y, glm::W)
+#define pstq swizzle(glm::Z, glm::X, glm::Y, glm::W)
+#define qstq swizzle(glm::W, glm::X, glm::Y, glm::W)
+#define sttq swizzle(glm::X, glm::Y, glm::Y, glm::W)
+#define tttq swizzle(glm::Y, glm::Y, glm::Y, glm::W)
+#define pttq swizzle(glm::Z, glm::Y, glm::Y, glm::W)
+#define qttq swizzle(glm::W, glm::Y, glm::Y, glm::W)
+#define sptq swizzle(glm::X, glm::Z, glm::Y, glm::W)
+#define tptq swizzle(glm::Y, glm::Z, glm::Y, glm::W)
+#define pptq swizzle(glm::Z, glm::Z, glm::Y, glm::W)
+#define qptq swizzle(glm::W, glm::Z, glm::Y, glm::W)
+#define sqtq swizzle(glm::X, glm::W, glm::Y, glm::W)
+#define tqtq swizzle(glm::Y, glm::W, glm::Y, glm::W)
+#define pqtq swizzle(glm::Z, glm::W, glm::Y, glm::W)
+#define qqtq swizzle(glm::W, glm::W, glm::Y, glm::W)
+#define sspq swizzle(glm::X, glm::X, glm::Z, glm::W)
+#define tspq swizzle(glm::Y, glm::X, glm::Z, glm::W)
+#define pspq swizzle(glm::Z, glm::X, glm::Z, glm::W)
+#define qspq swizzle(glm::W, glm::X, glm::Z, glm::W)
+#define stpq swizzle(glm::X, glm::Y, glm::Z, glm::W)
+#define ttpq swizzle(glm::Y, glm::Y, glm::Z, glm::W)
+#define ptpq swizzle(glm::Z, glm::Y, glm::Z, glm::W)
+#define qtpq swizzle(glm::W, glm::Y, glm::Z, glm::W)
+#define sppq swizzle(glm::X, glm::Z, glm::Z, glm::W)
+#define tppq swizzle(glm::Y, glm::Z, glm::Z, glm::W)
+#define pppq swizzle(glm::Z, glm::Z, glm::Z, glm::W)
+#define qppq swizzle(glm::W, glm::Z, glm::Z, glm::W)
+#define sqpq swizzle(glm::X, glm::W, glm::Z, glm::W)
+#define tqpq swizzle(glm::Y, glm::W, glm::Z, glm::W)
+#define pqpq swizzle(glm::Z, glm::W, glm::Z, glm::W)
+#define qqpq swizzle(glm::W, glm::W, glm::Z, glm::W)
+#define ssqq swizzle(glm::X, glm::X, glm::W, glm::W)
+#define tsqq swizzle(glm::Y, glm::X, glm::W, glm::W)
+#define psqq swizzle(glm::Z, glm::X, glm::W, glm::W)
+#define qsqq swizzle(glm::W, glm::X, glm::W, glm::W)
+#define stqq swizzle(glm::X, glm::Y, glm::W, glm::W)
+#define ttqq swizzle(glm::Y, glm::Y, glm::W, glm::W)
+#define ptqq swizzle(glm::Z, glm::Y, glm::W, glm::W)
+#define qtqq swizzle(glm::W, glm::Y, glm::W, glm::W)
+#define spqq swizzle(glm::X, glm::Z, glm::W, glm::W)
+#define tpqq swizzle(glm::Y, glm::Z, glm::W, glm::W)
+#define ppqq swizzle(glm::Z, glm::Z, glm::W, glm::W)
+#define qpqq swizzle(glm::W, glm::Z, glm::W, glm::W)
+#define sqqq swizzle(glm::X, glm::W, glm::W, glm::W)
+#define tqqq swizzle(glm::Y, glm::W, glm::W, glm::W)
+#define pqqq swizzle(glm::Z, glm::W, glm::W, glm::W)
+#define qqqq swizzle(glm::W, glm::W, glm::W, glm::W)
+
+#endif
+
+#endif//glm_core_swizzle

glm-0.9.2.3/glm/core/dummy.cpp

+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-01-19
+// Updated : 2011-01-19
+// Licence : This source is under MIT License
+// File    : glm/setup.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// GLM is a header only library. There is nothing to compile. 
+// dummy.cpp exist only a wordaround for CMake file.
+
+#include "../glm.hpp"
+#include "../ext.hpp"
+
+//#error "GLM is a header only library"
+
+int main()
+{
+
+}

glm-0.9.2.3/glm/core/func_common.hpp

+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-03-08
+// Updated : 2010-01-26
+// Licence : This source is under MIT License
+// File    : glm/core/func_common.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef glm_core_func_common
+#define glm_core_func_common
+
+#include "_fixes.hpp"
+
+namespace glm
+{
+	namespace core{
+	namespace function{
+	namespace common{ //!< Define common functions from Section 8.3 of GLSL 1.30.8 specification. Included in glm namespace.
+
+	/// \addtogroup core_funcs
+	///@{
+
+	//! Returns x if x >= 0; otherwise, it returns -x. 
+    //! 
+    //! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
+    //! \li GLSL 1.30.08 specification, section 8.3
+	template <typename genFIType> 
+	genFIType abs(genFIType const & x);
+
+	//! Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. 
+    //! 
+    //! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
+    //! \li GLSL 1.30.08 specification, section 8.3
+	template <typename genFIType> 
+	genFIType sign(genFIType const & x);
+
+    //! Returns a value equal to the nearest integer that is less then or equal to x. 
+    //! 
+    //! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
+    //! \li GLSL 1.30.08 specification, section 8.3
+	template <typename genType> 
+	genType floor(genType const & x);
+
+	//! Returns a value equal to the nearest integer to x 
+	//! whose absolute value is not larger than the absolute value of x. 
+    //! 
+    //! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>