Browse Source

Add C++ 20 Modules (#1208)

* Add support for C++20 modules.

---------

Co-authored-by: Nikita Gubarkov <[email protected]>
Co-authored-by: YaaZ <[email protected]>
Christophe 1 year ago
parent
commit
da9a21d7e3
2 changed files with 2722 additions and 0 deletions
  1. 2675 0
      glm/glm.cppm
  2. 47 0
      glm/gtx/number_precision.hpp

+ 2675 - 0
glm/glm.cppm

@@ -0,0 +1,2675 @@
+module;
+
+// #define GLM_GTC_INLINE_NAMESPACE to inline glm::gtc into glm
+// #define GLM_EXT_INLINE_NAMESPACE to inline glm::ext into glm
+// #define GLM_GTX_INLINE_NAMESPACE to inline glm::gtx into glm
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+export module glm;
+
+export namespace glm {
+	// Base types
+	using glm::qualifier;
+	using glm::precision;
+	using glm::vec;
+	using glm::mat;
+	using glm::qua;
+#	if GLM_HAS_TEMPLATE_ALIASES
+	using glm::tvec1;
+	using glm::tvec2;
+	using glm::tvec3;
+	using glm::tvec4;
+	using glm::tmat2x2;
+	using glm::tmat2x3;
+	using glm::tmat2x4;
+	using glm::tmat3x2;
+	using glm::tmat3x3;
+	using glm::tmat3x4;
+	using glm::tmat4x2;
+	using glm::tmat4x3;
+	using glm::tmat4x4;
+	using glm::tquat;
+#	endif
+
+	using glm::int8;
+	using glm::int16;
+	using glm::int32;
+	using glm::int64;
+	using glm::uint8;
+	using glm::uint16;
+	using glm::uint32;
+	using glm::uint64;
+	using glm::lowp_i8;
+	using glm::mediump_i8;
+	using glm::highp_i8;
+	using glm::i8;
+	using glm::lowp_int8;
+	using glm::mediump_int8;
+	using glm::highp_int8;
+	using glm::lowp_int8_t;
+	using glm::mediump_int8_t;
+	using glm::highp_int8_t;
+	using glm::int8_t;
+	using glm::lowp_i16;
+	using glm::mediump_i16;
+	using glm::highp_i16;
+	using glm::i16;
+	using glm::lowp_int16;
+	using glm::mediump_int16;
+	using glm::highp_int16;
+	using glm::lowp_int16_t;
+	using glm::mediump_int16_t;
+	using glm::highp_int16_t;
+	using glm::int16_t;
+	using glm::lowp_i32;
+	using glm::mediump_i32;
+	using glm::highp_i32;
+	using glm::i32;
+	using glm::lowp_int32;
+	using glm::mediump_int32;
+	using glm::highp_int32;
+	using glm::lowp_int32_t;
+	using glm::mediump_int32_t;
+	using glm::highp_int32_t;
+	using glm::int32_t;
+	using glm::lowp_i64;
+	using glm::mediump_i64;
+	using glm::highp_i64;
+	using glm::i64;
+	using glm::lowp_int64;
+	using glm::mediump_int64;
+	using glm::highp_int64;
+	using glm::lowp_int64_t;
+	using glm::mediump_int64_t;
+	using glm::highp_int64_t;
+	using glm::int64_t;
+	using glm::uint;
+	using glm::lowp_u8;
+	using glm::mediump_u8;
+	using glm::highp_u8;
+	using glm::u8;
+	using glm::lowp_uint8;
+	using glm::mediump_uint8;
+	using glm::highp_uint8;
+	using glm::lowp_uint8_t;
+	using glm::mediump_uint8_t;
+	using glm::highp_uint8_t;
+	using glm::uint8_t;
+	using glm::lowp_u16;
+	using glm::mediump_u16;
+	using glm::highp_u16;
+	using glm::u16;
+	using glm::lowp_uint16;
+	using glm::mediump_uint16;
+	using glm::highp_uint16;
+	using glm::lowp_uint16_t;
+	using glm::mediump_uint16_t;
+	using glm::highp_uint16_t;
+	using glm::uint16_t;
+	using glm::lowp_u32;
+	using glm::mediump_u32;
+	using glm::highp_u32;
+	using glm::u32;
+	using glm::lowp_uint32;
+	using glm::mediump_uint32;
+	using glm::highp_uint32;
+	using glm::lowp_uint32_t;
+	using glm::mediump_uint32_t;
+	using glm::highp_uint32_t;
+	using glm::uint32_t;
+	using glm::lowp_u64;
+	using glm::mediump_u64;
+	using glm::highp_u64;
+	using glm::u64;
+	using glm::lowp_uint64;
+	using glm::mediump_uint64;
+	using glm::highp_uint64;
+	using glm::lowp_uint64_t;
+	using glm::mediump_uint64_t;
+	using glm::highp_uint64_t;
+	using glm::uint64_t;
+	using glm::lowp_f32;
+	using glm::mediump_f32;
+	using glm::highp_f32;
+	using glm::f32;
+	using glm::lowp_float32;
+	using glm::mediump_float32;
+	using glm::highp_float32;
+	using glm::float32;
+	using glm::lowp_float32_t;
+	using glm::mediump_float32_t;
+	using glm::highp_float32_t;
+	using glm::float32_t;
+	using glm::lowp_f64;
+	using glm::mediump_f64;
+	using glm::highp_f64;
+	using glm::f64;
+	using glm::lowp_float64;
+	using glm::mediump_float64;
+	using glm::highp_float64;
+	using glm::float64;
+	using glm::lowp_float64_t;
+	using glm::mediump_float64_t;
+	using glm::highp_float64_t;
+	using glm::float64_t;
+	using glm::lowp_bvec1;
+	using glm::lowp_bvec2;
+	using glm::lowp_bvec3;
+	using glm::lowp_bvec4;
+	using glm::mediump_bvec1;
+	using glm::mediump_bvec2;
+	using glm::mediump_bvec3;
+	using glm::mediump_bvec4;
+	using glm::highp_bvec1;
+	using glm::highp_bvec2;
+	using glm::highp_bvec3;
+	using glm::highp_bvec4;
+	using glm::bvec1;
+	using glm::bvec2;
+	using glm::bvec3;
+	using glm::bvec4;
+	using glm::lowp_ivec1;
+	using glm::lowp_ivec2;
+	using glm::lowp_ivec3;
+	using glm::lowp_ivec4;
+	using glm::mediump_ivec1;
+	using glm::mediump_ivec2;
+	using glm::mediump_ivec3;
+	using glm::mediump_ivec4;
+	using glm::highp_ivec1;
+	using glm::highp_ivec2;
+	using glm::highp_ivec3;
+	using glm::highp_ivec4;
+	using glm::ivec1;
+	using glm::ivec2;
+	using glm::ivec3;
+	using glm::ivec4;
+	using glm::lowp_i8vec1;
+	using glm::lowp_i8vec2;
+	using glm::lowp_i8vec3;
+	using glm::lowp_i8vec4;
+	using glm::mediump_i8vec1;
+	using glm::mediump_i8vec2;
+	using glm::mediump_i8vec3;
+	using glm::mediump_i8vec4;
+	using glm::highp_i8vec1;
+	using glm::highp_i8vec2;
+	using glm::highp_i8vec3;
+	using glm::highp_i8vec4;
+	using glm::i8vec1;
+	using glm::i8vec2;
+	using glm::i8vec3;
+	using glm::i8vec4;
+	using glm::lowp_i16vec1;
+	using glm::lowp_i16vec2;
+	using glm::lowp_i16vec3;
+	using glm::lowp_i16vec4;
+	using glm::mediump_i16vec1;
+	using glm::mediump_i16vec2;
+	using glm::mediump_i16vec3;
+	using glm::mediump_i16vec4;
+	using glm::highp_i16vec1;
+	using glm::highp_i16vec2;
+	using glm::highp_i16vec3;
+	using glm::highp_i16vec4;
+	using glm::i16vec1;
+	using glm::i16vec2;
+	using glm::i16vec3;
+	using glm::i16vec4;
+	using glm::lowp_i32vec1;
+	using glm::lowp_i32vec2;
+	using glm::lowp_i32vec3;
+	using glm::lowp_i32vec4;
+	using glm::mediump_i32vec1;
+	using glm::mediump_i32vec2;
+	using glm::mediump_i32vec3;
+	using glm::mediump_i32vec4;
+	using glm::highp_i32vec1;
+	using glm::highp_i32vec2;
+	using glm::highp_i32vec3;
+	using glm::highp_i32vec4;
+	using glm::i32vec1;
+	using glm::i32vec2;
+	using glm::i32vec3;
+	using glm::i32vec4;
+	using glm::lowp_i64vec1;
+	using glm::lowp_i64vec2;
+	using glm::lowp_i64vec3;
+	using glm::lowp_i64vec4;
+	using glm::mediump_i64vec1;
+	using glm::mediump_i64vec2;
+	using glm::mediump_i64vec3;
+	using glm::mediump_i64vec4;
+	using glm::highp_i64vec1;
+	using glm::highp_i64vec2;
+	using glm::highp_i64vec3;
+	using glm::highp_i64vec4;
+	using glm::i64vec1;
+	using glm::i64vec2;
+	using glm::i64vec3;
+	using glm::i64vec4;
+	using glm::lowp_uvec1;
+	using glm::lowp_uvec2;
+	using glm::lowp_uvec3;
+	using glm::lowp_uvec4;
+	using glm::mediump_uvec1;
+	using glm::mediump_uvec2;
+	using glm::mediump_uvec3;
+	using glm::mediump_uvec4;
+	using glm::highp_uvec1;
+	using glm::highp_uvec2;
+	using glm::highp_uvec3;
+	using glm::highp_uvec4;
+	using glm::uvec1;
+	using glm::uvec2;
+	using glm::uvec3;
+	using glm::uvec4;
+	using glm::lowp_u8vec1;
+	using glm::lowp_u8vec2;
+	using glm::lowp_u8vec3;
+	using glm::lowp_u8vec4;
+	using glm::mediump_u8vec1;
+	using glm::mediump_u8vec2;
+	using glm::mediump_u8vec3;
+	using glm::mediump_u8vec4;
+	using glm::highp_u8vec1;
+	using glm::highp_u8vec2;
+	using glm::highp_u8vec3;
+	using glm::highp_u8vec4;
+	using glm::u8vec1;
+	using glm::u8vec2;
+	using glm::u8vec3;
+	using glm::u8vec4;
+	using glm::lowp_u16vec1;
+	using glm::lowp_u16vec2;
+	using glm::lowp_u16vec3;
+	using glm::lowp_u16vec4;
+	using glm::mediump_u16vec1;
+	using glm::mediump_u16vec2;
+	using glm::mediump_u16vec3;
+	using glm::mediump_u16vec4;
+	using glm::highp_u16vec1;
+	using glm::highp_u16vec2;
+	using glm::highp_u16vec3;
+	using glm::highp_u16vec4;
+	using glm::u16vec1;
+	using glm::u16vec2;
+	using glm::u16vec3;
+	using glm::u16vec4;
+	using glm::lowp_u32vec1;
+	using glm::lowp_u32vec2;
+	using glm::lowp_u32vec3;
+	using glm::lowp_u32vec4;
+	using glm::mediump_u32vec1;
+	using glm::mediump_u32vec2;
+	using glm::mediump_u32vec3;
+	using glm::mediump_u32vec4;
+	using glm::highp_u32vec1;
+	using glm::highp_u32vec2;
+	using glm::highp_u32vec3;
+	using glm::highp_u32vec4;
+	using glm::u32vec1;
+	using glm::u32vec2;
+	using glm::u32vec3;
+	using glm::u32vec4;
+	using glm::lowp_u64vec1;
+	using glm::lowp_u64vec2;
+	using glm::lowp_u64vec3;
+	using glm::lowp_u64vec4;
+	using glm::mediump_u64vec1;
+	using glm::mediump_u64vec2;
+	using glm::mediump_u64vec3;
+	using glm::mediump_u64vec4;
+	using glm::highp_u64vec1;
+	using glm::highp_u64vec2;
+	using glm::highp_u64vec3;
+	using glm::highp_u64vec4;
+	using glm::u64vec1;
+	using glm::u64vec2;
+	using glm::u64vec3;
+	using glm::u64vec4;
+	using glm::lowp_vec1;
+	using glm::lowp_vec2;
+	using glm::lowp_vec3;
+	using glm::lowp_vec4;
+	using glm::mediump_vec1;
+	using glm::mediump_vec2;
+	using glm::mediump_vec3;
+	using glm::mediump_vec4;
+	using glm::highp_vec1;
+	using glm::highp_vec2;
+	using glm::highp_vec3;
+	using glm::highp_vec4;
+	using glm::vec1;
+	using glm::vec2;
+	using glm::vec3;
+	using glm::vec4;
+	using glm::lowp_fvec1;
+	using glm::lowp_fvec2;
+	using glm::lowp_fvec3;
+	using glm::lowp_fvec4;
+	using glm::mediump_fvec1;
+	using glm::mediump_fvec2;
+	using glm::mediump_fvec3;
+	using glm::mediump_fvec4;
+	using glm::highp_fvec1;
+	using glm::highp_fvec2;
+	using glm::highp_fvec3;
+	using glm::highp_fvec4;
+	using glm::fvec1;
+	using glm::fvec2;
+	using glm::fvec3;
+	using glm::fvec4;
+	using glm::lowp_f32vec1;
+	using glm::lowp_f32vec2;
+	using glm::lowp_f32vec3;
+	using glm::lowp_f32vec4;
+	using glm::mediump_f32vec1;
+	using glm::mediump_f32vec2;
+	using glm::mediump_f32vec3;
+	using glm::mediump_f32vec4;
+	using glm::highp_f32vec1;
+	using glm::highp_f32vec2;
+	using glm::highp_f32vec3;
+	using glm::highp_f32vec4;
+	using glm::f32vec1;
+	using glm::f32vec2;
+	using glm::f32vec3;
+	using glm::f32vec4;
+	using glm::lowp_dvec1;
+	using glm::lowp_dvec2;
+	using glm::lowp_dvec3;
+	using glm::lowp_dvec4;
+	using glm::mediump_dvec1;
+	using glm::mediump_dvec2;
+	using glm::mediump_dvec3;
+	using glm::mediump_dvec4;
+	using glm::highp_dvec1;
+	using glm::highp_dvec2;
+	using glm::highp_dvec3;
+	using glm::highp_dvec4;
+	using glm::dvec1;
+	using glm::dvec2;
+	using glm::dvec3;
+	using glm::dvec4;
+	using glm::lowp_f64vec1;
+	using glm::lowp_f64vec2;
+	using glm::lowp_f64vec3;
+	using glm::lowp_f64vec4;
+	using glm::mediump_f64vec1;
+	using glm::mediump_f64vec2;
+	using glm::mediump_f64vec3;
+	using glm::mediump_f64vec4;
+	using glm::highp_f64vec1;
+	using glm::highp_f64vec2;
+	using glm::highp_f64vec3;
+	using glm::highp_f64vec4;
+	using glm::f64vec1;
+	using glm::f64vec2;
+	using glm::f64vec3;
+	using glm::f64vec4;
+	using glm::lowp_mat2;
+	using glm::lowp_mat3;
+	using glm::lowp_mat4;
+	using glm::mediump_mat2;
+	using glm::mediump_mat3;
+	using glm::mediump_mat4;
+	using glm::highp_mat2;
+	using glm::highp_mat3;
+	using glm::highp_mat4;
+	using glm::mat2;
+	using glm::mat3;
+	using glm::mat4;
+	using glm::lowp_fmat2;
+	using glm::lowp_fmat3;
+	using glm::lowp_fmat4;
+	using glm::mediump_fmat2;
+	using glm::mediump_fmat3;
+	using glm::mediump_fmat4;
+	using glm::highp_fmat2;
+	using glm::highp_fmat3;
+	using glm::highp_fmat4;
+	using glm::fmat2;
+	using glm::fmat3;
+	using glm::fmat4;
+	using glm::lowp_f32mat2;
+	using glm::lowp_f32mat3;
+	using glm::lowp_f32mat4;
+	using glm::mediump_f32mat2;
+	using glm::mediump_f32mat3;
+	using glm::mediump_f32mat4;
+	using glm::highp_f32mat2;
+	using glm::highp_f32mat3;
+	using glm::highp_f32mat4;
+	using glm::f32mat2;
+	using glm::f32mat3;
+	using glm::f32mat4;
+	using glm::lowp_dmat2;
+	using glm::lowp_dmat3;
+	using glm::lowp_dmat4;
+	using glm::mediump_dmat2;
+	using glm::mediump_dmat3;
+	using glm::mediump_dmat4;
+	using glm::highp_dmat2;
+	using glm::highp_dmat3;
+	using glm::highp_dmat4;
+	using glm::dmat2;
+	using glm::dmat3;
+	using glm::dmat4;
+	using glm::lowp_f64mat2;
+	using glm::lowp_f64mat3;
+	using glm::lowp_f64mat4;
+	using glm::mediump_f64mat2;
+	using glm::mediump_f64mat3;
+	using glm::mediump_f64mat4;
+	using glm::highp_f64mat2;
+	using glm::highp_f64mat3;
+	using glm::highp_f64mat4;
+	using glm::f64mat2;
+	using glm::f64mat3;
+	using glm::f64mat4;
+	using glm::lowp_mat2x2;
+	using glm::lowp_mat2x3;
+	using glm::lowp_mat2x4;
+	using glm::lowp_mat3x2;
+	using glm::lowp_mat3x3;
+	using glm::lowp_mat3x4;
+	using glm::lowp_mat4x2;
+	using glm::lowp_mat4x3;
+	using glm::lowp_mat4x4;
+	using glm::mediump_mat2x2;
+	using glm::mediump_mat2x3;
+	using glm::mediump_mat2x4;
+	using glm::mediump_mat3x2;
+	using glm::mediump_mat3x3;
+	using glm::mediump_mat3x4;
+	using glm::mediump_mat4x2;
+	using glm::mediump_mat4x3;
+	using glm::mediump_mat4x4;
+	using glm::highp_mat2x2;
+	using glm::highp_mat2x3;
+	using glm::highp_mat2x4;
+	using glm::highp_mat3x2;
+	using glm::highp_mat3x3;
+	using glm::highp_mat3x4;
+	using glm::highp_mat4x2;
+	using glm::highp_mat4x3;
+	using glm::highp_mat4x4;
+	using glm::mat2x2;
+	using glm::mat2x3;
+	using glm::mat2x4;
+	using glm::mat3x2;
+	using glm::mat3x3;
+	using glm::mat3x4;
+	using glm::mat4x2;
+	using glm::mat4x3;
+	using glm::mat4x4;
+	using glm::lowp_fmat2x2;
+	using glm::lowp_fmat2x3;
+	using glm::lowp_fmat2x4;
+	using glm::lowp_fmat3x2;
+	using glm::lowp_fmat3x3;
+	using glm::lowp_fmat3x4;
+	using glm::lowp_fmat4x2;
+	using glm::lowp_fmat4x3;
+	using glm::lowp_fmat4x4;
+	using glm::mediump_fmat2x2;
+	using glm::mediump_fmat2x3;
+	using glm::mediump_fmat2x4;
+	using glm::mediump_fmat3x2;
+	using glm::mediump_fmat3x3;
+	using glm::mediump_fmat3x4;
+	using glm::mediump_fmat4x2;
+	using glm::mediump_fmat4x3;
+	using glm::mediump_fmat4x4;
+	using glm::highp_fmat2x2;
+	using glm::highp_fmat2x3;
+	using glm::highp_fmat2x4;
+	using glm::highp_fmat3x2;
+	using glm::highp_fmat3x3;
+	using glm::highp_fmat3x4;
+	using glm::highp_fmat4x2;
+	using glm::highp_fmat4x3;
+	using glm::highp_fmat4x4;
+	using glm::fmat2x2;
+	using glm::fmat2x3;
+	using glm::fmat2x4;
+	using glm::fmat3x2;
+	using glm::fmat3x3;
+	using glm::fmat3x4;
+	using glm::fmat4x2;
+	using glm::fmat4x3;
+	using glm::fmat4x4;
+	using glm::lowp_f32mat2x2;
+	using glm::lowp_f32mat2x3;
+	using glm::lowp_f32mat2x4;
+	using glm::lowp_f32mat3x2;
+	using glm::lowp_f32mat3x3;
+	using glm::lowp_f32mat3x4;
+	using glm::lowp_f32mat4x2;
+	using glm::lowp_f32mat4x3;
+	using glm::lowp_f32mat4x4;
+
+	using glm::mediump_f32mat2x2;
+	using glm::mediump_f32mat2x3;
+	using glm::mediump_f32mat2x4;
+	using glm::mediump_f32mat3x2;
+	using glm::mediump_f32mat3x3;
+	using glm::mediump_f32mat3x4;
+	using glm::mediump_f32mat4x2;
+	using glm::mediump_f32mat4x3;
+	using glm::mediump_f32mat4x4;
+	using glm::highp_f32mat2x2;
+	using glm::highp_f32mat2x3;
+	using glm::highp_f32mat2x4;
+	using glm::highp_f32mat3x2;
+	using glm::highp_f32mat3x3;
+	using glm::highp_f32mat3x4;
+	using glm::highp_f32mat4x2;
+	using glm::highp_f32mat4x3;
+	using glm::highp_f32mat4x4;
+	using glm::f32mat2x2;
+	using glm::f32mat2x3;
+	using glm::f32mat2x4;
+	using glm::f32mat3x2;
+	using glm::f32mat3x3;
+	using glm::f32mat3x4;
+	using glm::f32mat4x2;
+	using glm::f32mat4x3;
+	using glm::f32mat4x4;
+	using glm::lowp_dmat2x2;
+	using glm::lowp_dmat2x3;
+	using glm::lowp_dmat2x4;
+	using glm::lowp_dmat3x2;
+	using glm::lowp_dmat3x3;
+	using glm::lowp_dmat3x4;
+	using glm::lowp_dmat4x2;
+	using glm::lowp_dmat4x3;
+	using glm::lowp_dmat4x4;
+	using glm::mediump_dmat2x2;
+	using glm::mediump_dmat2x3;
+	using glm::mediump_dmat2x4;
+	using glm::mediump_dmat3x2;
+	using glm::mediump_dmat3x3;
+	using glm::mediump_dmat3x4;
+	using glm::mediump_dmat4x2;
+	using glm::mediump_dmat4x3;
+	using glm::mediump_dmat4x4;
+	using glm::highp_dmat2x2;
+	using glm::highp_dmat2x3;
+	using glm::highp_dmat2x4;
+	using glm::highp_dmat3x2;
+	using glm::highp_dmat3x3;
+	using glm::highp_dmat3x4;
+	using glm::highp_dmat4x2;
+	using glm::highp_dmat4x3;
+	using glm::highp_dmat4x4;
+	using glm::dmat2x2;
+	using glm::dmat2x3;
+	using glm::dmat2x4;
+	using glm::dmat3x2;
+	using glm::dmat3x3;
+	using glm::dmat3x4;
+	using glm::dmat4x2;
+	using glm::dmat4x3;
+	using glm::dmat4x4;
+	using glm::lowp_f64mat2x2;
+	using glm::lowp_f64mat2x3;
+	using glm::lowp_f64mat2x4;
+	using glm::lowp_f64mat3x2;
+	using glm::lowp_f64mat3x3;
+	using glm::lowp_f64mat3x4;
+	using glm::lowp_f64mat4x2;
+	using glm::lowp_f64mat4x3;
+	using glm::lowp_f64mat4x4;
+	using glm::mediump_f64mat2x2;
+	using glm::mediump_f64mat2x3;
+	using glm::mediump_f64mat2x4;
+	using glm::mediump_f64mat3x2;
+	using glm::mediump_f64mat3x3;
+	using glm::mediump_f64mat3x4;
+	using glm::mediump_f64mat4x2;
+	using glm::mediump_f64mat4x3;
+	using glm::mediump_f64mat4x4;
+	using glm::highp_f64mat2x2;
+	using glm::highp_f64mat2x3;
+	using glm::highp_f64mat2x4;
+	using glm::highp_f64mat3x2;
+	using glm::highp_f64mat3x3;
+	using glm::highp_f64mat3x4;
+	using glm::highp_f64mat4x2;
+	using glm::highp_f64mat4x3;
+	using glm::highp_f64mat4x4;
+	using glm::f64mat2x2;
+	using glm::f64mat2x3;
+	using glm::f64mat2x4;
+	using glm::f64mat3x2;
+	using glm::f64mat3x3;
+	using glm::f64mat3x4;
+	using glm::f64mat4x2;
+	using glm::f64mat4x3;
+	using glm::f64mat4x4;
+	using glm::lowp_imat2x2;
+	using glm::lowp_imat2x3;
+	using glm::lowp_imat2x4;
+	using glm::lowp_imat3x2;
+	using glm::lowp_imat3x3;
+	using glm::lowp_imat3x4;
+	using glm::lowp_imat4x2;
+	using glm::lowp_imat4x3;
+	using glm::lowp_imat4x4;
+	using glm::mediump_imat2x2;
+	using glm::mediump_imat2x3;
+	using glm::mediump_imat2x4;
+	using glm::mediump_imat3x2;
+	using glm::mediump_imat3x3;
+	using glm::mediump_imat3x4;
+	using glm::mediump_imat4x2;
+	using glm::mediump_imat4x3;
+	using glm::mediump_imat4x4;
+	using glm::highp_imat2x2;
+	using glm::highp_imat2x3;
+	using glm::highp_imat2x4;
+	using glm::highp_imat3x2;
+	using glm::highp_imat3x3;
+	using glm::highp_imat3x4;
+	using glm::highp_imat4x2;
+	using glm::highp_imat4x3;
+	using glm::highp_imat4x4;
+	using glm::imat2x2;
+	using glm::imat2x3;
+	using glm::imat2x4;
+	using glm::imat3x2;
+	using glm::imat3x3;
+	using glm::imat3x4;
+	using glm::imat4x2;
+	using glm::imat4x3;
+	using glm::imat4x4;
+	using glm::lowp_i8mat2x2;
+	using glm::lowp_i8mat2x3;
+	using glm::lowp_i8mat2x4;
+	using glm::lowp_i8mat3x2;
+	using glm::lowp_i8mat3x3;
+	using glm::lowp_i8mat3x4;
+	using glm::lowp_i8mat4x2;
+	using glm::lowp_i8mat4x3;
+	using glm::lowp_i8mat4x4;
+	using glm::mediump_i8mat2x2;
+	using glm::mediump_i8mat2x3;
+	using glm::mediump_i8mat2x4;
+	using glm::mediump_i8mat3x2;
+	using glm::mediump_i8mat3x3;
+	using glm::mediump_i8mat3x4;
+	using glm::mediump_i8mat4x2;
+	using glm::mediump_i8mat4x3;
+	using glm::mediump_i8mat4x4;
+	using glm::highp_i8mat2x2;
+	using glm::highp_i8mat2x3;
+	using glm::highp_i8mat2x4;
+	using glm::highp_i8mat3x2;
+	using glm::highp_i8mat3x3;
+	using glm::highp_i8mat3x4;
+	using glm::highp_i8mat4x2;
+	using glm::highp_i8mat4x3;
+	using glm::highp_i8mat4x4;
+	using glm::i8mat2x2;
+	using glm::i8mat2x3;
+	using glm::i8mat2x4;
+	using glm::i8mat3x2;
+	using glm::i8mat3x3;
+	using glm::i8mat3x4;
+	using glm::i8mat4x2;
+	using glm::i8mat4x3;
+	using glm::i8mat4x4;
+	using glm::lowp_i16mat2x2;
+	using glm::lowp_i16mat2x3;
+	using glm::lowp_i16mat2x4;
+	using glm::lowp_i16mat3x2;
+	using glm::lowp_i16mat3x3;
+	using glm::lowp_i16mat3x4;
+	using glm::lowp_i16mat4x2;
+	using glm::lowp_i16mat4x3;
+	using glm::lowp_i16mat4x4;
+	using glm::mediump_i16mat2x2;
+	using glm::mediump_i16mat2x3;
+	using glm::mediump_i16mat2x4;
+	using glm::mediump_i16mat3x2;
+	using glm::mediump_i16mat3x3;
+	using glm::mediump_i16mat3x4;
+	using glm::mediump_i16mat4x2;
+	using glm::mediump_i16mat4x3;
+	using glm::mediump_i16mat4x4;
+	using glm::highp_i16mat2x2;
+	using glm::highp_i16mat2x3;
+	using glm::highp_i16mat2x4;
+	using glm::highp_i16mat3x2;
+	using glm::highp_i16mat3x3;
+	using glm::highp_i16mat3x4;
+	using glm::highp_i16mat4x2;
+	using glm::highp_i16mat4x3;
+	using glm::highp_i16mat4x4;
+	using glm::i16mat2x2;
+	using glm::i16mat2x3;
+	using glm::i16mat2x4;
+	using glm::i16mat3x2;
+	using glm::i16mat3x3;
+	using glm::i16mat3x4;
+	using glm::i16mat4x2;
+	using glm::i16mat4x3;
+	using glm::i16mat4x4;
+	using glm::lowp_i32mat2x2;
+	using glm::lowp_i32mat2x3;
+	using glm::lowp_i32mat2x4;
+	using glm::lowp_i32mat3x2;
+	using glm::lowp_i32mat3x3;
+	using glm::lowp_i32mat3x4;
+	using glm::lowp_i32mat4x2;
+	using glm::lowp_i32mat4x3;
+	using glm::lowp_i32mat4x4;
+	using glm::mediump_i32mat2x2;
+	using glm::mediump_i32mat2x3;
+	using glm::mediump_i32mat2x4;
+	using glm::mediump_i32mat3x2;
+	using glm::mediump_i32mat3x3;
+	using glm::mediump_i32mat3x4;
+	using glm::mediump_i32mat4x2;
+	using glm::mediump_i32mat4x3;
+	using glm::mediump_i32mat4x4;
+	using glm::highp_i32mat2x2;
+	using glm::highp_i32mat2x3;
+	using glm::highp_i32mat2x4;
+	using glm::highp_i32mat3x2;
+	using glm::highp_i32mat3x3;
+	using glm::highp_i32mat3x4;
+	using glm::highp_i32mat4x2;
+	using glm::highp_i32mat4x3;
+	using glm::highp_i32mat4x4;
+	using glm::i32mat2x2;
+	using glm::i32mat2x3;
+	using glm::i32mat2x4;
+	using glm::i32mat3x2;
+	using glm::i32mat3x3;
+	using glm::i32mat3x4;
+	using glm::i32mat4x2;
+	using glm::i32mat4x3;
+	using glm::i32mat4x4;
+	using glm::lowp_i64mat2x2;
+	using glm::lowp_i64mat2x3;
+	using glm::lowp_i64mat2x4;
+	using glm::lowp_i64mat3x2;
+	using glm::lowp_i64mat3x3;
+	using glm::lowp_i64mat3x4;
+	using glm::lowp_i64mat4x2;
+	using glm::lowp_i64mat4x3;
+	using glm::lowp_i64mat4x4;
+	using glm::mediump_i64mat2x2;
+	using glm::mediump_i64mat2x3;
+	using glm::mediump_i64mat2x4;
+	using glm::mediump_i64mat3x2;
+	using glm::mediump_i64mat3x3;
+	using glm::mediump_i64mat3x4;
+	using glm::mediump_i64mat4x2;
+	using glm::mediump_i64mat4x3;
+	using glm::mediump_i64mat4x4;
+	using glm::highp_i64mat2x2;
+	using glm::highp_i64mat2x3;
+	using glm::highp_i64mat2x4;
+	using glm::highp_i64mat3x2;
+	using glm::highp_i64mat3x3;
+	using glm::highp_i64mat3x4;
+	using glm::highp_i64mat4x2;
+	using glm::highp_i64mat4x3;
+	using glm::highp_i64mat4x4;
+	using glm::i64mat2x2;
+	using glm::i64mat2x3;
+	using glm::i64mat2x4;
+	using glm::i64mat3x2;
+	using glm::i64mat3x3;
+	using glm::i64mat3x4;
+	using glm::i64mat4x2;
+	using glm::i64mat4x3;
+	using glm::i64mat4x4;
+	using glm::lowp_umat2x2;
+	using glm::lowp_umat2x3;
+	using glm::lowp_umat2x4;
+	using glm::lowp_umat3x2;
+	using glm::lowp_umat3x3;
+	using glm::lowp_umat3x4;
+	using glm::lowp_umat4x2;
+	using glm::lowp_umat4x3;
+	using glm::lowp_umat4x4;
+	using glm::mediump_umat2x2;
+	using glm::mediump_umat2x3;
+	using glm::mediump_umat2x4;
+	using glm::mediump_umat3x2;
+	using glm::mediump_umat3x3;
+	using glm::mediump_umat3x4;
+	using glm::mediump_umat4x2;
+	using glm::mediump_umat4x3;
+	using glm::mediump_umat4x4;
+	using glm::highp_umat2x2;
+	using glm::highp_umat2x3;
+	using glm::highp_umat2x4;
+	using glm::highp_umat3x2;
+	using glm::highp_umat3x3;
+	using glm::highp_umat3x4;
+	using glm::highp_umat4x2;
+	using glm::highp_umat4x3;
+	using glm::highp_umat4x4;
+	using glm::umat2x2;
+	using glm::umat2x3;
+	using glm::umat2x4;
+	using glm::umat3x2;
+	using glm::umat3x3;
+	using glm::umat3x4;
+	using glm::umat4x2;
+	using glm::umat4x3;
+	using glm::umat4x4;
+	using glm::lowp_u8mat2x2;
+	using glm::lowp_u8mat2x3;
+	using glm::lowp_u8mat2x4;
+	using glm::lowp_u8mat3x2;
+	using glm::lowp_u8mat3x3;
+	using glm::lowp_u8mat3x4;
+	using glm::lowp_u8mat4x2;
+	using glm::lowp_u8mat4x3;
+	using glm::lowp_u8mat4x4;
+	using glm::mediump_u8mat2x2;
+	using glm::mediump_u8mat2x3;
+	using glm::mediump_u8mat2x4;
+	using glm::mediump_u8mat3x2;
+	using glm::mediump_u8mat3x3;
+	using glm::mediump_u8mat3x4;
+	using glm::mediump_u8mat4x2;
+	using glm::mediump_u8mat4x3;
+	using glm::mediump_u8mat4x4;
+	using glm::highp_u8mat2x2;
+	using glm::highp_u8mat2x3;
+	using glm::highp_u8mat2x4;
+	using glm::highp_u8mat3x2;
+	using glm::highp_u8mat3x3;
+	using glm::highp_u8mat3x4;
+	using glm::highp_u8mat4x2;
+	using glm::highp_u8mat4x3;
+	using glm::highp_u8mat4x4;
+	using glm::u8mat2x2;
+	using glm::u8mat2x3;
+	using glm::u8mat2x4;
+	using glm::u8mat3x2;
+	using glm::u8mat3x3;
+	using glm::u8mat3x4;
+	using glm::u8mat4x2;
+	using glm::u8mat4x3;
+	using glm::u8mat4x4;
+	using glm::lowp_u16mat2x2;
+	using glm::lowp_u16mat2x3;
+	using glm::lowp_u16mat2x4;
+	using glm::lowp_u16mat3x2;
+	using glm::lowp_u16mat3x3;
+	using glm::lowp_u16mat3x4;
+	using glm::lowp_u16mat4x2;
+	using glm::lowp_u16mat4x3;
+	using glm::lowp_u16mat4x4;
+	using glm::mediump_u16mat2x2;
+	using glm::mediump_u16mat2x3;
+	using glm::mediump_u16mat2x4;
+	using glm::mediump_u16mat3x2;
+	using glm::mediump_u16mat3x3;
+	using glm::mediump_u16mat3x4;
+	using glm::mediump_u16mat4x2;
+	using glm::mediump_u16mat4x3;
+	using glm::mediump_u16mat4x4;
+	using glm::highp_u16mat2x2;
+	using glm::highp_u16mat2x3;
+	using glm::highp_u16mat2x4;
+	using glm::highp_u16mat3x2;
+	using glm::highp_u16mat3x3;
+	using glm::highp_u16mat3x4;
+	using glm::highp_u16mat4x2;
+	using glm::highp_u16mat4x3;
+	using glm::highp_u16mat4x4;
+	using glm::u16mat2x2;
+	using glm::u16mat2x3;
+	using glm::u16mat2x4;
+	using glm::u16mat3x2;
+	using glm::u16mat3x3;
+	using glm::u16mat3x4;
+	using glm::u16mat4x2;
+	using glm::u16mat4x3;
+	using glm::u16mat4x4;
+	using glm::lowp_u32mat2x2;
+	using glm::lowp_u32mat2x3;
+	using glm::lowp_u32mat2x4;
+	using glm::lowp_u32mat3x2;
+	using glm::lowp_u32mat3x3;
+	using glm::lowp_u32mat3x4;
+	using glm::lowp_u32mat4x2;
+	using glm::lowp_u32mat4x3;
+	using glm::lowp_u32mat4x4;
+	using glm::mediump_u32mat2x2;
+	using glm::mediump_u32mat2x3;
+	using glm::mediump_u32mat2x4;
+	using glm::mediump_u32mat3x2;
+	using glm::mediump_u32mat3x3;
+	using glm::mediump_u32mat3x4;
+	using glm::mediump_u32mat4x2;
+	using glm::mediump_u32mat4x3;
+	using glm::mediump_u32mat4x4;
+	using glm::highp_u32mat2x2;
+	using glm::highp_u32mat2x3;
+	using glm::highp_u32mat2x4;
+	using glm::highp_u32mat3x2;
+	using glm::highp_u32mat3x3;
+	using glm::highp_u32mat3x4;
+	using glm::highp_u32mat4x2;
+	using glm::highp_u32mat4x3;
+	using glm::highp_u32mat4x4;
+	using glm::u32mat2x2;
+	using glm::u32mat2x3;
+	using glm::u32mat2x4;
+	using glm::u32mat3x2;
+	using glm::u32mat3x3;
+	using glm::u32mat3x4;
+	using glm::u32mat4x2;
+	using glm::u32mat4x3;
+	using glm::u32mat4x4;
+	using glm::lowp_u64mat2x2;
+	using glm::lowp_u64mat2x3;
+	using glm::lowp_u64mat2x4;
+	using glm::lowp_u64mat3x2;
+	using glm::lowp_u64mat3x3;
+	using glm::lowp_u64mat3x4;
+	using glm::lowp_u64mat4x2;
+	using glm::lowp_u64mat4x3;
+	using glm::lowp_u64mat4x4;
+	using glm::mediump_u64mat2x2;
+	using glm::mediump_u64mat2x3;
+	using glm::mediump_u64mat2x4;
+	using glm::mediump_u64mat3x2;
+	using glm::mediump_u64mat3x3;
+	using glm::mediump_u64mat3x4;
+	using glm::mediump_u64mat4x2;
+	using glm::mediump_u64mat4x3;
+	using glm::mediump_u64mat4x4;
+	using glm::highp_u64mat2x2;
+	using glm::highp_u64mat2x3;
+	using glm::highp_u64mat2x4;
+	using glm::highp_u64mat3x2;
+	using glm::highp_u64mat3x3;
+	using glm::highp_u64mat3x4;
+	using glm::highp_u64mat4x2;
+	using glm::highp_u64mat4x3;
+	using glm::highp_u64mat4x4;
+	using glm::u64mat2x2;
+	using glm::u64mat2x3;
+	using glm::u64mat2x4;
+	using glm::u64mat3x2;
+	using glm::u64mat3x3;
+	using glm::u64mat3x4;
+	using glm::u64mat4x2;
+	using glm::u64mat4x3;
+	using glm::u64mat4x4;
+	using glm::lowp_quat;
+	using glm::mediump_quat;
+	using glm::highp_quat;
+	using glm::quat;
+	using glm::lowp_fquat;
+	using glm::mediump_fquat;
+	using glm::highp_fquat;
+	using glm::fquat;
+	using glm::lowp_f32quat;
+	using glm::mediump_f32quat;
+	using glm::highp_f32quat;
+	using glm::f32quat;
+	using glm::lowp_dquat;
+	using glm::mediump_dquat;
+	using glm::highp_dquat;
+	using glm::dquat;
+	using glm::lowp_f64quat;
+	using glm::mediump_f64quat;
+	using glm::highp_f64quat;
+	using glm::f64quat;
+
+	// Operators
+	using glm::operator+;
+	using glm::operator-;
+	using glm::operator*;
+	using glm::operator/;
+	using glm::operator%;
+	using glm::operator^;
+	using glm::operator&;
+	using glm::operator|;
+	using glm::operator~;
+	using glm::operator<<;
+	using glm::operator>>;
+	using glm::operator==;
+	using glm::operator!=;
+	using glm::operator&&;
+	using glm::operator||;
+
+	// Core functions
+	using glm::abs;
+	using glm::acos;
+	using glm::acosh;
+	using glm::all;
+	using glm::any;
+	using glm::asin;
+	using glm::asinh;
+	using glm::atan;
+	using glm::atanh;
+	using glm::bitCount;
+	using glm::bitfieldExtract;
+	using glm::bitfieldInsert;
+	using glm::bitfieldReverse;
+	using glm::ceil;
+	using glm::clamp;
+	using glm::cos;
+	using glm::cosh;
+	using glm::cross;
+	using glm::degrees;
+	using glm::determinant;
+	using glm::distance;
+	using glm::dot;
+	using glm::equal;
+	using glm::exp;
+	using glm::exp2;
+	using glm::faceforward;
+	using glm::findLSB;
+	using glm::findMSB;
+	using glm::floatBitsToInt;
+	using glm::floatBitsToUint;
+	using glm::floor;
+	using glm::fma;
+	using glm::fract;
+	using glm::frexp;
+	using glm::greaterThan;
+	using glm::greaterThanEqual;
+	using glm::imulExtended;
+	using glm::intBitsToFloat;
+	using glm::inverse;
+	using glm::inversesqrt;
+	using glm::isinf;
+	using glm::isnan;
+	using glm::ldexp;
+	using glm::length;
+	using glm::lessThan;
+	using glm::lessThanEqual;
+	using glm::log;
+	using glm::log2;
+	using glm::matrixCompMult;
+	using glm::max;
+	using glm::min;
+	using glm::mix;
+	using glm::mod;
+	using glm::modf;
+	using glm::normalize;
+	using glm::notEqual;
+	using glm::not_;
+	using glm::outerProduct;
+	using glm::packDouble2x32;
+	using glm::packHalf2x16;
+	using glm::packSnorm2x16;
+	using glm::packSnorm4x8;
+	using glm::packUnorm2x16;
+	using glm::packUnorm4x8;
+	using glm::pow;
+	using glm::radians;
+	using glm::reflect;
+	using glm::refract;
+	using glm::round;
+	using glm::roundEven;
+	using glm::sign;
+	using glm::sin;
+	using glm::sinh;
+	using glm::smoothstep;
+	using glm::sqrt;
+	using glm::step;
+	using glm::tan;
+	using glm::tanh;
+	using glm::transpose;
+	using glm::trunc;
+	using glm::uaddCarry;
+	using glm::uintBitsToFloat;
+	using glm::umulExtended;
+	using glm::unpackDouble2x32;
+	using glm::unpackHalf2x16;
+	using glm::unpackSnorm2x16;
+	using glm::unpackSnorm4x8;
+	using glm::unpackUnorm2x16;
+	using glm::unpackUnorm4x8;
+	using glm::usubBorrow;
+
+#   ifdef GLM_GTC_INLINE_NAMESPACE
+	inline
+#   endif
+	namespace gtc {
+#       if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
+		using glm::aligned_highp_vec1;
+		using glm::aligned_mediump_vec1;
+		using glm::aligned_lowp_vec1;
+		using glm::aligned_highp_dvec1;
+		using glm::aligned_mediump_dvec1;
+		using glm::aligned_lowp_dvec1;
+		using glm::aligned_highp_ivec1;
+		using glm::aligned_mediump_ivec1;
+		using glm::aligned_lowp_ivec1;
+		using glm::aligned_highp_uvec1;
+		using glm::aligned_mediump_uvec1;
+		using glm::aligned_lowp_uvec1;
+		using glm::aligned_highp_bvec1;
+		using glm::aligned_mediump_bvec1;
+		using glm::aligned_lowp_bvec1;
+		using glm::packed_highp_vec1;
+		using glm::packed_mediump_vec1;
+		using glm::packed_lowp_vec1;
+		using glm::packed_highp_dvec1;
+		using glm::packed_mediump_dvec1;
+		using glm::packed_lowp_dvec1;
+		using glm::packed_highp_ivec1;
+		using glm::packed_mediump_ivec1;
+		using glm::packed_lowp_ivec1;
+		using glm::packed_highp_uvec1;
+		using glm::packed_mediump_uvec1;
+		using glm::packed_lowp_uvec1;
+		using glm::packed_highp_bvec1;
+		using glm::packed_mediump_bvec1;
+		using glm::packed_lowp_bvec1;
+		using glm::aligned_highp_vec2;
+		using glm::aligned_mediump_vec2;
+		using glm::aligned_lowp_vec2;
+		using glm::aligned_highp_dvec2;
+		using glm::aligned_mediump_dvec2;
+		using glm::aligned_lowp_dvec2;
+		using glm::aligned_highp_ivec2;
+		using glm::aligned_mediump_ivec2;
+		using glm::aligned_lowp_ivec2;
+		using glm::aligned_highp_uvec2;
+		using glm::aligned_mediump_uvec2;
+		using glm::aligned_lowp_uvec2;
+		using glm::aligned_highp_bvec2;
+		using glm::aligned_mediump_bvec2;
+		using glm::aligned_lowp_bvec2;
+		using glm::packed_highp_vec2;
+		using glm::packed_mediump_vec2;
+		using glm::packed_lowp_vec2;
+		using glm::packed_highp_dvec2;
+		using glm::packed_mediump_dvec2;
+		using glm::packed_lowp_dvec2;
+		using glm::packed_highp_ivec2;
+		using glm::packed_mediump_ivec2;
+		using glm::packed_lowp_ivec2;
+		using glm::packed_highp_uvec2;
+		using glm::packed_mediump_uvec2;
+		using glm::packed_lowp_uvec2;
+		using glm::packed_highp_bvec2;
+		using glm::packed_mediump_bvec2;
+		using glm::packed_lowp_bvec2;
+		using glm::aligned_highp_vec3;
+		using glm::aligned_mediump_vec3;
+		using glm::aligned_lowp_vec3;
+		using glm::aligned_highp_dvec3;
+		using glm::aligned_mediump_dvec3;
+		using glm::aligned_lowp_dvec3;
+		using glm::aligned_highp_ivec3;
+		using glm::aligned_mediump_ivec3;
+		using glm::aligned_lowp_ivec3;
+		using glm::aligned_highp_uvec3;
+		using glm::aligned_mediump_uvec3;
+		using glm::aligned_lowp_uvec3;
+		using glm::aligned_highp_bvec3;
+		using glm::aligned_mediump_bvec3;
+		using glm::aligned_lowp_bvec3;
+		using glm::packed_highp_vec3;
+		using glm::packed_mediump_vec3;
+		using glm::packed_lowp_vec3;
+		using glm::packed_highp_dvec3;
+		using glm::packed_mediump_dvec3;
+		using glm::packed_lowp_dvec3;
+		using glm::packed_highp_ivec3;
+		using glm::packed_mediump_ivec3;
+		using glm::packed_lowp_ivec3;
+		using glm::packed_highp_uvec3;
+		using glm::packed_mediump_uvec3;
+		using glm::packed_lowp_uvec3;
+		using glm::packed_highp_bvec3;
+		using glm::packed_mediump_bvec3;
+		using glm::packed_lowp_bvec3;
+		using glm::aligned_highp_vec4;
+		using glm::aligned_mediump_vec4;
+		using glm::aligned_lowp_vec4;
+		using glm::aligned_highp_dvec4;
+		using glm::aligned_mediump_dvec4;
+		using glm::aligned_lowp_dvec4;
+		using glm::aligned_highp_ivec4;
+		using glm::aligned_mediump_ivec4;
+		using glm::aligned_lowp_ivec4;
+		using glm::aligned_highp_uvec4;
+		using glm::aligned_mediump_uvec4;
+		using glm::aligned_lowp_uvec4;
+		using glm::aligned_highp_bvec4;
+		using glm::aligned_mediump_bvec4;
+		using glm::aligned_lowp_bvec4;
+		using glm::packed_highp_vec4;
+		using glm::packed_mediump_vec4;
+		using glm::packed_lowp_vec4;
+		using glm::packed_highp_dvec4;
+		using glm::packed_mediump_dvec4;
+		using glm::packed_lowp_dvec4;
+		using glm::packed_highp_ivec4;
+		using glm::packed_mediump_ivec4;
+		using glm::packed_lowp_ivec4;
+		using glm::packed_highp_uvec4;
+		using glm::packed_mediump_uvec4;
+		using glm::packed_lowp_uvec4;
+		using glm::packed_highp_bvec4;
+		using glm::packed_mediump_bvec4;
+		using glm::packed_lowp_bvec4;
+		using glm::aligned_highp_mat2;
+		using glm::aligned_mediump_mat2;
+		using glm::aligned_lowp_mat2;
+		using glm::aligned_highp_dmat2;
+		using glm::aligned_mediump_dmat2;
+		using glm::aligned_lowp_dmat2;
+		using glm::packed_highp_mat2;
+		using glm::packed_mediump_mat2;
+		using glm::packed_lowp_mat2;
+		using glm::packed_highp_dmat2;
+		using glm::packed_mediump_dmat2;
+		using glm::packed_lowp_dmat2;
+		using glm::aligned_highp_mat3;
+		using glm::aligned_mediump_mat3;
+		using glm::aligned_lowp_mat3;
+		using glm::aligned_highp_dmat3;
+		using glm::aligned_mediump_dmat3;
+		using glm::aligned_lowp_dmat3;
+		using glm::packed_highp_mat3;
+		using glm::packed_mediump_mat3;
+		using glm::packed_lowp_mat3;
+		using glm::packed_highp_dmat3;
+		using glm::packed_mediump_dmat3;
+		using glm::packed_lowp_dmat3;
+		using glm::aligned_highp_mat4;
+		using glm::aligned_mediump_mat4;
+		using glm::aligned_lowp_mat4;
+		using glm::aligned_highp_dmat4;
+		using glm::aligned_mediump_dmat4;
+		using glm::aligned_lowp_dmat4;
+		using glm::packed_highp_mat4;
+		using glm::packed_mediump_mat4;
+		using glm::packed_lowp_mat4;
+		using glm::packed_highp_dmat4;
+		using glm::packed_mediump_dmat4;
+		using glm::packed_lowp_dmat4;
+		using glm::aligned_highp_mat2x2;
+		using glm::aligned_mediump_mat2x2;
+		using glm::aligned_lowp_mat2x2;
+		using glm::aligned_highp_dmat2x2;
+		using glm::aligned_mediump_dmat2x2;
+		using glm::aligned_lowp_dmat2x2;
+		using glm::packed_highp_mat2x2;
+		using glm::packed_mediump_mat2x2;
+		using glm::packed_lowp_mat2x2;
+		using glm::packed_highp_dmat2x2;
+		using glm::packed_mediump_dmat2x2;
+		using glm::packed_lowp_dmat2x2;
+		using glm::aligned_highp_mat2x3;
+		using glm::aligned_mediump_mat2x3;
+		using glm::aligned_lowp_mat2x3;
+		using glm::aligned_highp_dmat2x3;
+		using glm::aligned_mediump_dmat2x3;
+		using glm::aligned_lowp_dmat2x3;
+		using glm::packed_highp_mat2x3;
+		using glm::packed_mediump_mat2x3;
+		using glm::packed_lowp_mat2x3;
+		using glm::packed_highp_dmat2x3;
+		using glm::packed_mediump_dmat2x3;
+		using glm::packed_lowp_dmat2x3;
+		using glm::aligned_highp_mat2x4;
+		using glm::aligned_mediump_mat2x4;
+		using glm::aligned_lowp_mat2x4;
+		using glm::aligned_highp_dmat2x4;
+		using glm::aligned_mediump_dmat2x4;
+		using glm::aligned_lowp_dmat2x4;
+		using glm::packed_highp_mat2x4;
+		using glm::packed_mediump_mat2x4;
+		using glm::packed_lowp_mat2x4;
+		using glm::packed_highp_dmat2x4;
+		using glm::packed_mediump_dmat2x4;
+		using glm::packed_lowp_dmat2x4;
+		using glm::aligned_highp_mat3x2;
+		using glm::aligned_mediump_mat3x2;
+		using glm::aligned_lowp_mat3x2;
+		using glm::aligned_highp_dmat3x2;
+		using glm::aligned_mediump_dmat3x2;
+		using glm::aligned_lowp_dmat3x2;
+		using glm::packed_highp_mat3x2;
+		using glm::packed_mediump_mat3x2;
+		using glm::packed_lowp_mat3x2;
+		using glm::packed_highp_dmat3x2;
+		using glm::packed_mediump_dmat3x2;
+		using glm::packed_lowp_dmat3x2;
+		using glm::aligned_highp_mat3x3;
+		using glm::aligned_mediump_mat3x3;
+		using glm::aligned_lowp_mat3x3;
+		using glm::aligned_highp_dmat3x3;
+		using glm::aligned_mediump_dmat3x3;
+		using glm::aligned_lowp_dmat3x3;
+		using glm::packed_highp_mat3x3;
+		using glm::packed_mediump_mat3x3;
+		using glm::packed_lowp_mat3x3;
+		using glm::packed_highp_dmat3x3;
+		using glm::packed_mediump_dmat3x3;
+		using glm::packed_lowp_dmat3x3;
+		using glm::aligned_highp_mat3x4;
+		using glm::aligned_mediump_mat3x4;
+		using glm::aligned_lowp_mat3x4;
+		using glm::aligned_highp_dmat3x4;
+		using glm::aligned_mediump_dmat3x4;
+		using glm::aligned_lowp_dmat3x4;
+		using glm::packed_highp_mat3x4;
+		using glm::packed_mediump_mat3x4;
+		using glm::packed_lowp_mat3x4;
+		using glm::packed_highp_dmat3x4;
+		using glm::packed_mediump_dmat3x4;
+		using glm::packed_lowp_dmat3x4;
+		using glm::aligned_highp_mat4x2;
+		using glm::aligned_mediump_mat4x2;
+		using glm::aligned_lowp_mat4x2;
+		using glm::aligned_highp_dmat4x2;
+		using glm::aligned_mediump_dmat4x2;
+		using glm::aligned_lowp_dmat4x2;
+		using glm::packed_highp_mat4x2;
+		using glm::packed_mediump_mat4x2;
+		using glm::packed_lowp_mat4x2;
+		using glm::packed_highp_dmat4x2;
+		using glm::packed_mediump_dmat4x2;
+		using glm::packed_lowp_dmat4x2;
+		using glm::aligned_highp_mat4x3;
+		using glm::aligned_mediump_mat4x3;
+		using glm::aligned_lowp_mat4x3;
+		using glm::aligned_highp_dmat4x3;
+		using glm::aligned_mediump_dmat4x3;
+		using glm::aligned_lowp_dmat4x3;
+		using glm::packed_highp_mat4x3;
+		using glm::packed_mediump_mat4x3;
+		using glm::packed_lowp_mat4x3;
+		using glm::packed_highp_dmat4x3;
+		using glm::packed_mediump_dmat4x3;
+		using glm::packed_lowp_dmat4x3;
+		using glm::aligned_highp_mat4x4;
+		using glm::aligned_mediump_mat4x4;
+		using glm::aligned_lowp_mat4x4;
+		using glm::aligned_highp_dmat4x4;
+		using glm::aligned_mediump_dmat4x4;
+		using glm::aligned_lowp_dmat4x4;
+		using glm::packed_highp_mat4x4;
+		using glm::packed_mediump_mat4x4;
+		using glm::packed_lowp_mat4x4;
+		using glm::packed_highp_dmat4x4;
+		using glm::packed_mediump_dmat4x4;
+		using glm::packed_lowp_dmat4x4;
+#       if(defined(GLM_PRECISION_LOWP_FLOAT))
+		using glm::aligned_vec1;
+		using glm::aligned_vec2;
+		using glm::aligned_vec3;
+		using glm::aligned_vec4;
+		using glm::packed_vec1;
+		using glm::packed_vec2;
+		using glm::packed_vec3;
+		using glm::packed_vec4;
+		using glm::aligned_mat2;
+		using glm::aligned_mat3;
+		using glm::aligned_mat4;
+		using glm::packed_mat2;
+		using glm::packed_mat3;
+		using glm::packed_mat4;
+		using glm::aligned_mat2x2;
+		using glm::aligned_mat2x3;
+		using glm::aligned_mat2x4;
+		using glm::aligned_mat3x2;
+		using glm::aligned_mat3x3;
+		using glm::aligned_mat3x4;
+		using glm::aligned_mat4x2;
+		using glm::aligned_mat4x3;
+		using glm::aligned_mat4x4;
+		using glm::packed_mat2x2;
+		using glm::packed_mat2x3;
+		using glm::packed_mat2x4;
+		using glm::packed_mat3x2;
+		using glm::packed_mat3x3;
+		using glm::packed_mat3x4;
+		using glm::packed_mat4x2;
+		using glm::packed_mat4x3;
+		using glm::packed_mat4x4;
+#       elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+		using glm::aligned_vec1;
+		using glm::aligned_vec2;
+		using glm::aligned_vec3;
+		using glm::aligned_vec4;
+		using glm::packed_vec1;
+		using glm::packed_vec2;
+		using glm::packed_vec3;
+		using glm::packed_vec4;
+		using glm::aligned_mat2;
+		using glm::aligned_mat3;
+		using glm::aligned_mat4;
+		using glm::packed_mat2;
+		using glm::packed_mat3;
+		using glm::packed_mat4;
+		using glm::aligned_mat2x2;
+		using glm::aligned_mat2x3;
+		using glm::aligned_mat2x4;
+		using glm::aligned_mat3x2;
+		using glm::aligned_mat3x3;
+		using glm::aligned_mat3x4;
+		using glm::aligned_mat4x2;
+		using glm::aligned_mat4x3;
+		using glm::aligned_mat4x4;
+		using glm::packed_mat2x2;
+		using glm::packed_mat2x3;
+		using glm::packed_mat2x4;
+		using glm::packed_mat3x2;
+		using glm::packed_mat3x3;
+		using glm::packed_mat3x4;
+		using glm::packed_mat4x2;
+		using glm::packed_mat4x3;
+		using glm::packed_mat4x4;
+#       else //defined(GLM_PRECISION_HIGHP_FLOAT)
+		using glm::aligned_vec1;
+		using glm::aligned_vec2;
+		using glm::aligned_vec3;
+		using glm::aligned_vec4;
+		using glm::packed_vec1;
+		using glm::packed_vec2;
+		using glm::packed_vec3;
+		using glm::packed_vec4;
+		using glm::aligned_mat2;
+		using glm::aligned_mat3;
+		using glm::aligned_mat4;
+		using glm::packed_mat2;
+		using glm::packed_mat3;
+		using glm::packed_mat4;
+		using glm::aligned_mat2x2;
+		using glm::aligned_mat2x3;
+		using glm::aligned_mat2x4;
+		using glm::aligned_mat3x2;
+		using glm::aligned_mat3x3;
+		using glm::aligned_mat3x4;
+		using glm::aligned_mat4x2;
+		using glm::aligned_mat4x3;
+		using glm::aligned_mat4x4;
+		using glm::packed_mat2x2;
+		using glm::packed_mat2x3;
+		using glm::packed_mat2x4;
+		using glm::packed_mat3x2;
+		using glm::packed_mat3x3;
+		using glm::packed_mat3x4;
+		using glm::packed_mat4x2;
+		using glm::packed_mat4x3;
+		using glm::packed_mat4x4;
+#       endif//GLM_PRECISION
+#       if(defined(GLM_PRECISION_LOWP_DOUBLE))
+		using glm::aligned_dvec1;
+		using glm::aligned_dvec2;
+		using glm::aligned_dvec3;
+		using glm::aligned_dvec4;
+		using glm::packed_dvec1;
+		using glm::packed_dvec2;
+		using glm::packed_dvec3;
+		using glm::packed_dvec4;
+		using glm::aligned_dmat2;
+		using glm::aligned_dmat3;
+		using glm::aligned_dmat4;
+		using glm::packed_dmat2;
+		using glm::packed_dmat3;
+		using glm::packed_dmat4;
+		using glm::aligned_dmat2x2;
+		using glm::aligned_dmat2x3;
+		using glm::aligned_dmat2x4;
+		using glm::aligned_dmat3x2;
+		using glm::aligned_dmat3x3;
+		using glm::aligned_dmat3x4;
+		using glm::aligned_dmat4x2;
+		using glm::aligned_dmat4x3;
+		using glm::aligned_dmat4x4;
+		using glm::packed_dmat2x2;
+		using glm::packed_dmat2x3;
+		using glm::packed_dmat2x4;
+		using glm::packed_dmat3x2;
+		using glm::packed_dmat3x3;
+		using glm::packed_dmat3x4;
+		using glm::packed_dmat4x2;
+		using glm::packed_dmat4x3;
+		using glm::packed_dmat4x4;
+#       elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+		using glm::aligned_dvec1;
+		using glm::aligned_dvec2;
+		using glm::aligned_dvec3;
+		using glm::aligned_dvec4;
+		using glm::packed_dvec1;
+		using glm::packed_dvec2;
+		using glm::packed_dvec3;
+		using glm::packed_dvec4;
+		using glm::aligned_dmat2;
+		using glm::aligned_dmat3;
+		using glm::aligned_dmat4;
+		using glm::packed_dmat2;
+		using glm::packed_dmat3;
+		using glm::packed_dmat4;
+		using glm::aligned_dmat2x2;
+		using glm::aligned_dmat2x3;
+		using glm::aligned_dmat2x4;
+		using glm::aligned_dmat3x2;
+		using glm::aligned_dmat3x3;
+		using glm::aligned_dmat3x4;
+		using glm::aligned_dmat4x2;
+		using glm::aligned_dmat4x3;
+		using glm::aligned_dmat4x4;
+		using glm::packed_dmat2x2;
+		using glm::packed_dmat2x3;
+		using glm::packed_dmat2x4;
+		using glm::packed_dmat3x2;
+		using glm::packed_dmat3x3;
+		using glm::packed_dmat3x4;
+		using glm::packed_dmat4x2;
+		using glm::packed_dmat4x3;
+		using glm::packed_dmat4x4;
+#       else //defined(GLM_PRECISION_HIGHP_DOUBLE)
+		using glm::aligned_dvec1;
+		using glm::aligned_dvec2;
+		using glm::aligned_dvec3;
+		using glm::aligned_dvec4;
+		using glm::packed_dvec1;
+		using glm::packed_dvec2;
+		using glm::packed_dvec3;
+		using glm::packed_dvec4;
+		using glm::aligned_dmat2;
+		using glm::aligned_dmat3;
+		using glm::aligned_dmat4;
+		using glm::packed_dmat2;
+		using glm::packed_dmat3;
+		using glm::packed_dmat4;
+		using glm::aligned_dmat2x2;
+		using glm::aligned_dmat2x3;
+		using glm::aligned_dmat2x4;
+		using glm::aligned_dmat3x2;
+		using glm::aligned_dmat3x3;
+		using glm::aligned_dmat3x4;
+		using glm::aligned_dmat4x2;
+		using glm::aligned_dmat4x3;
+		using glm::aligned_dmat4x4;
+		using glm::packed_dmat2x2;
+		using glm::packed_dmat2x3;
+		using glm::packed_dmat2x4;
+		using glm::packed_dmat3x2;
+		using glm::packed_dmat3x3;
+		using glm::packed_dmat3x4;
+		using glm::packed_dmat4x2;
+		using glm::packed_dmat4x3;
+		using glm::packed_dmat4x4;
+#       endif//GLM_PRECISION
+#       if(defined(GLM_PRECISION_LOWP_INT))
+		using glm::aligned_ivec1;
+		using glm::aligned_ivec2;
+		using glm::aligned_ivec3;
+		using glm::aligned_ivec4;
+#       elif(defined(GLM_PRECISION_MEDIUMP_INT))
+		using glm::aligned_ivec1;
+		using glm::aligned_ivec2;
+		using glm::aligned_ivec3;
+		using glm::aligned_ivec4;
+#       else //defined(GLM_PRECISION_HIGHP_INT)
+		using glm::aligned_ivec1;
+		using glm::aligned_ivec2;
+		using glm::aligned_ivec3;
+		using glm::aligned_ivec4;
+		using glm::packed_ivec1;
+		using glm::packed_ivec2;
+		using glm::packed_ivec3;
+		using glm::packed_ivec4;
+#       endif//GLM_PRECISION
+#       if(defined(GLM_PRECISION_LOWP_UINT))
+		using glm::aligned_uvec1;
+		using glm::aligned_uvec2;
+		using glm::aligned_uvec3;
+		using glm::aligned_uvec4;
+#       elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+		using glm::aligned_uvec1;
+		using glm::aligned_uvec2;
+		using glm::aligned_uvec3;
+		using glm::aligned_uvec4;
+#       else //defined(GLM_PRECISION_HIGHP_UINT)
+		using glm::aligned_uvec1;
+		using glm::aligned_uvec2;
+		using glm::aligned_uvec3;
+		using glm::aligned_uvec4;
+		using glm::packed_uvec1;
+		using glm::packed_uvec2;
+		using glm::packed_uvec3;
+		using glm::packed_uvec4;
+#       endif//GLM_PRECISION
+#       if(defined(GLM_PRECISION_LOWP_BOOL))
+		using glm::aligned_bvec1;
+		using glm::aligned_bvec2;
+		using glm::aligned_bvec3;
+		using glm::aligned_bvec4;
+#       elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
+		using glm::aligned_bvec1;
+		using glm::aligned_bvec2;
+		using glm::aligned_bvec3;
+		using glm::aligned_bvec4;
+#       else //defined(GLM_PRECISION_HIGHP_BOOL)
+		using glm::aligned_bvec1;
+		using glm::aligned_bvec2;
+		using glm::aligned_bvec3;
+		using glm::aligned_bvec4;
+		using glm::packed_bvec1;
+		using glm::packed_bvec2;
+		using glm::packed_bvec3;
+		using glm::packed_bvec4;
+#       endif//GLM_PRECISION
+#       endif
+
+
+		using glm::abs;
+		using glm::acos;
+		using glm::acosh;
+		using glm::acot;
+		using glm::acoth;
+		using glm::acsc;
+		using glm::acsch;
+		using glm::affineInverse;
+		using glm::all;
+		using glm::angle;
+		using glm::angleAxis;
+		using glm::any;
+		using glm::asec;
+		using glm::asech;
+		using glm::asin;
+		using glm::asinh;
+		using glm::atan;
+		using glm::atanh;
+		using glm::axis;
+		using glm::ballRand;
+		using glm::bitCount;
+		using glm::bitfieldDeinterleave;
+		using glm::bitfieldExtract;
+		using glm::bitfieldFillOne;
+		using glm::bitfieldFillZero;
+		using glm::bitfieldInsert;
+		using glm::bitfieldInterleave;
+		using glm::bitfieldReverse;
+		using glm::bitfieldRotateLeft;
+		using glm::bitfieldRotateRight;
+		using glm::ceil;
+		using glm::ceilMultiple;
+		using glm::ceilPowerOfTwo;
+		using glm::circularRand;
+		using glm::clamp;
+		using glm::column;
+		using glm::conjugate;
+		using glm::convertLinearToSRGB;
+		using glm::convertSRGBToLinear;
+		using glm::cos;
+		using glm::cos_one_over_two;
+		using glm::cosh;
+		using glm::cot;
+		using glm::coth;
+		using glm::cross;
+		using glm::csc;
+		using glm::csch;
+		using glm::degrees;
+		using glm::determinant;
+		using glm::diskRand;
+		using glm::distance;
+		using glm::dot;
+		using glm::e;
+		using glm::epsilon;
+		using glm::epsilonEqual;
+		using glm::epsilonNotEqual;
+		using glm::equal;
+		using glm::euler;
+		using glm::eulerAngles;
+		using glm::exp;
+		using glm::exp2;
+		using glm::faceforward;
+		using glm::fclamp;
+		using glm::findLSB;
+		using glm::findMSB;
+		using glm::floatBitsToInt;
+		using glm::floatBitsToUint;
+		using glm::float_distance;
+		using glm::floor;
+		using glm::floorMultiple;
+		using glm::floorPowerOfTwo;
+		using glm::fma;
+		using glm::fmax;
+		using glm::fmin;
+		using glm::four_over_pi;
+		using glm::fract;
+		using glm::frexp;
+		using glm::frustum;
+		using glm::frustumLH;
+		using glm::frustumLH_NO;
+		using glm::frustumLH_ZO;
+		using glm::frustumNO;
+		using glm::frustumRH;
+		using glm::frustumRH_NO;
+		using glm::frustumRH_ZO;
+		using glm::frustumZO;
+		using glm::gaussRand;
+		using glm::golden_ratio;
+		using glm::greaterThan;
+		using glm::greaterThanEqual;
+		using glm::half_pi;
+		using glm::identity;
+		using glm::imulExtended;
+		using glm::infinitePerspective;
+		using glm::infinitePerspectiveLH;
+		using glm::infinitePerspectiveRH;
+		using glm::intBitsToFloat;
+		using glm::inverse;
+		using glm::inverseTranspose;
+		using glm::inversesqrt;
+		using glm::iround;
+		using glm::isinf;
+		using glm::isnan;
+		using glm::ldexp;
+		using glm::length;
+		using glm::lerp;
+		using glm::lessThan;
+		using glm::lessThanEqual;
+		using glm::linearRand;
+		using glm::ln_ln_two;
+		using glm::ln_ten;
+		using glm::ln_two;
+		using glm::log;
+		using glm::log2;
+		using glm::lookAt;
+		using glm::lookAtLH;
+		using glm::lookAtRH;
+		using glm::make_mat2;
+		using glm::make_mat2x2;
+		using glm::make_mat2x3;
+		using glm::make_mat2x4;
+		using glm::make_mat3;
+		using glm::make_mat3x2;
+		using glm::make_mat3x3;
+		using glm::make_mat3x4;
+		using glm::make_mat4;
+		using glm::make_mat4x2;
+		using glm::make_mat4x3;
+		using glm::make_mat4x4;
+		using glm::make_quat;
+		using glm::make_vec1;
+		using glm::make_vec2;
+		using glm::make_vec3;
+		using glm::make_vec4;
+		using glm::mask;
+		using glm::mat3_cast;
+		using glm::mat4_cast;
+		using glm::matrixCompMult;
+		using glm::max;
+		using glm::min;
+		using glm::mirrorClamp;
+		using glm::mirrorRepeat;
+		using glm::mix;
+		using glm::mod;
+		using glm::modf;
+		using glm::next_float;
+		using glm::normalize;
+		using glm::notEqual;
+		using glm::not_;
+		using glm::one;
+		using glm::one_over_pi;
+		using glm::one_over_root_two;
+		using glm::one_over_two_pi;
+		using glm::ortho;
+		using glm::orthoLH;
+		using glm::orthoLH_NO;
+		using glm::orthoLH_ZO;
+		using glm::orthoNO;
+		using glm::orthoRH;
+		using glm::orthoRH_NO;
+		using glm::orthoRH_ZO;
+		using glm::orthoZO;
+		using glm::outerProduct;
+		using glm::packF2x11_1x10;
+		using glm::packF3x9_E1x5;
+		using glm::packHalf;
+		using glm::packHalf1x16;
+		using glm::packHalf4x16;
+		using glm::packI3x10_1x2;
+		using glm::packInt2x16;
+		using glm::packInt2x32;
+		using glm::packInt2x8;
+		using glm::packInt4x16;
+		using glm::packInt4x8;
+		using glm::packRGBM;
+		using glm::packSnorm;
+		using glm::packSnorm1x16;
+		using glm::packSnorm1x8;
+		using glm::packSnorm2x8;
+		using glm::packSnorm3x10_1x2;
+		using glm::packSnorm4x16;
+		using glm::packU3x10_1x2;
+		using glm::packUint2x16;
+		using glm::packUint2x32;
+		using glm::packUint2x8;
+		using glm::packUint4x16;
+		using glm::packUint4x8;
+		using glm::packUnorm;
+		using glm::packUnorm1x16;
+		using glm::packUnorm1x5_1x6_1x5;
+		using glm::packUnorm1x8;
+		using glm::packUnorm2x3_1x2;
+		using glm::packUnorm2x4;
+		using glm::packUnorm2x8;
+		using glm::packUnorm3x10_1x2;
+		using glm::packUnorm3x5_1x1;
+		using glm::packUnorm4x16;
+		using glm::packUnorm4x4;
+		using glm::perlin;
+		using glm::perspective;
+		using glm::perspectiveFov;
+		using glm::perspectiveFovLH;
+		using glm::perspectiveFovLH_NO;
+		using glm::perspectiveFovLH_ZO;
+		using glm::perspectiveFovNO;
+		using glm::perspectiveFovRH;
+		using glm::perspectiveFovRH_NO;
+		using glm::perspectiveFovRH_ZO;
+		using glm::perspectiveFovZO;
+		using glm::perspectiveLH;
+		using glm::perspectiveLH_NO;
+		using glm::perspectiveLH_ZO;
+		using glm::perspectiveNO;
+		using glm::perspectiveRH;
+		using glm::perspectiveRH_NO;
+		using glm::perspectiveRH_ZO;
+		using glm::perspectiveZO;
+		using glm::pi;
+		using glm::pickMatrix;
+		using glm::pitch;
+		using glm::pow;
+		using glm::prev_float;
+		using glm::project;
+		using glm::projectNO;
+		using glm::projectZO;
+		using glm::quarter_pi;
+		using glm::quatLookAt;
+		using glm::quatLookAtLH;
+		using glm::quatLookAtRH;
+		using glm::quat_cast;
+		using glm::radians;
+		using glm::reflect;
+		using glm::refract;
+		using glm::repeat;
+		using glm::roll;
+		using glm::root_five;
+		using glm::root_half_pi;
+		using glm::root_ln_four;
+		using glm::root_pi;
+		using glm::root_three;
+		using glm::root_two;
+		using glm::root_two_pi;
+		using glm::rotate;
+		using glm::round;
+		using glm::roundEven;
+		using glm::roundMultiple;
+		using glm::roundPowerOfTwo;
+		using glm::row;
+		using glm::scale;
+		using glm::sec;
+		using glm::sech;
+		using glm::sign;
+		using glm::simplex;
+		using glm::sin;
+		using glm::sinh;
+		using glm::slerp;
+		using glm::smoothstep;
+		using glm::sphericalRand;
+		using glm::sqrt;
+		using glm::step;
+		using glm::tan;
+		using glm::tanh;
+		using glm::third;
+		using glm::three_over_two_pi;
+		using glm::translate;
+		using glm::transpose;
+		using glm::trunc;
+		using glm::tweakedInfinitePerspective;
+		using glm::two_over_pi;
+		using glm::two_over_root_pi;
+		using glm::two_pi;
+		using glm::two_thirds;
+		using glm::uaddCarry;
+		using glm::uintBitsToFloat;
+		using glm::umulExtended;
+		using glm::unProject;
+		using glm::unProjectNO;
+		using glm::unProjectZO;
+		using glm::unpackF2x11_1x10;
+		using glm::unpackF3x9_E1x5;
+		using glm::unpackHalf;
+		using glm::unpackHalf1x16;
+		using glm::unpackHalf4x16;
+		using glm::unpackI3x10_1x2;
+		using glm::unpackInt2x16;
+		using glm::unpackInt2x32;
+		using glm::unpackInt2x8;
+		using glm::unpackInt4x16;
+		using glm::unpackInt4x8;
+		using glm::unpackRGBM;
+		using glm::unpackSnorm;
+		using glm::unpackSnorm1x16;
+		using glm::unpackSnorm1x8;
+		using glm::unpackSnorm2x8;
+		using glm::unpackSnorm3x10_1x2;
+		using glm::unpackSnorm4x16;
+		using glm::unpackU3x10_1x2;
+		using glm::unpackUint2x16;
+		using glm::unpackUint2x32;
+		using glm::unpackUint2x8;
+		using glm::unpackUint4x16;
+		using glm::unpackUint4x8;
+		using glm::unpackUnorm;
+		using glm::unpackUnorm1x16;
+		using glm::unpackUnorm1x5_1x6_1x5;
+		using glm::unpackUnorm1x8;
+		using glm::unpackUnorm2x3_1x2;
+		using glm::unpackUnorm2x4;
+		using glm::unpackUnorm2x8;
+		using glm::unpackUnorm3x10_1x2;
+		using glm::unpackUnorm3x5_1x1;
+		using glm::unpackUnorm4x16;
+		using glm::unpackUnorm4x4;
+		using glm::uround;
+		using glm::usubBorrow;
+		using glm::value_ptr;
+		using glm::yaw;
+		using glm::zero;
+	}
+
+#   ifdef GLM_EXT_INLINE_NAMESPACE
+	inline
+#   endif
+	namespace ext {
+		using glm::abs;
+		using glm::acos;
+		using glm::acosh;
+		using glm::acot;
+		using glm::acoth;
+		using glm::acsc;
+		using glm::acsch;
+		using glm::all;
+		using glm::angle;
+		using glm::angleAxis;
+		using glm::any;
+		using glm::asec;
+		using glm::asech;
+		using glm::asin;
+		using glm::asinh;
+		using glm::atan;
+		using glm::atanh;
+		using glm::axis;
+		using glm::ceil;
+		using glm::clamp;
+		using glm::conjugate;
+		using glm::cos;
+		using glm::cos_one_over_two;
+		using glm::cosh;
+		using glm::cot;
+		using glm::coth;
+		using glm::cross;
+		using glm::csc;
+		using glm::csch;
+		using glm::degrees;
+		using glm::determinant;
+		using glm::distance;
+		using glm::dot;
+		using glm::e;
+		using glm::epsilon;
+		using glm::equal;
+		using glm::euler;
+		using glm::exp;
+		using glm::exp2;
+		using glm::faceforward;
+		using glm::fclamp;
+		using glm::findNSB;
+		using glm::floatBitsToInt;
+		using glm::floatBitsToUint;
+		using glm::floatDistance;
+		using glm::floor;
+		using glm::fma;
+		using glm::fmax;
+		using glm::fmin;
+		using glm::four_over_pi;
+		using glm::fract;
+		using glm::frexp;
+		using glm::frustum;
+		using glm::frustumLH;
+		using glm::frustumLH_NO;
+		using glm::frustumLH_ZO;
+		using glm::frustumNO;
+		using glm::frustumRH;
+		using glm::frustumRH_NO;
+		using glm::frustumRH_ZO;
+		using glm::frustumZO;
+		using glm::golden_ratio;
+		using glm::greaterThan;
+		using glm::greaterThanEqual;
+		using glm::half_pi;
+		using glm::identity;
+		using glm::infinitePerspective;
+		using glm::infinitePerspectiveLH;
+		using glm::infinitePerspectiveRH;
+		using glm::intBitsToFloat;
+		using glm::inverse;
+		using glm::inversesqrt;
+		using glm::iround;
+		using glm::isMultiple;
+		using glm::isPowerOfTwo;
+		using glm::isinf;
+		using glm::isnan;
+		using glm::ldexp;
+		using glm::length;
+		using glm::lerp;
+		using glm::lessThan;
+		using glm::lessThanEqual;
+		using glm::ln_ln_two;
+		using glm::ln_ten;
+		using glm::ln_two;
+		using glm::log;
+		using glm::log2;
+		using glm::lookAt;
+		using glm::lookAtLH;
+		using glm::lookAtRH;
+		using glm::matrixCompMult;
+		using glm::max;
+		using glm::min;
+		using glm::mirrorClamp;
+		using glm::mirrorRepeat;
+		using glm::mix;
+		using glm::mod;
+		using glm::modf;
+		using glm::nextFloat;
+		using glm::nextMultiple;
+		using glm::nextPowerOfTwo;
+		using glm::normalize;
+		using glm::notEqual;
+		using glm::not_;
+		using glm::one;
+		using glm::one_over_pi;
+		using glm::one_over_root_two;
+		using glm::one_over_two_pi;
+		using glm::ortho;
+		using glm::orthoLH;
+		using glm::orthoLH_NO;
+		using glm::orthoLH_ZO;
+		using glm::orthoNO;
+		using glm::orthoRH;
+		using glm::orthoRH_NO;
+		using glm::orthoRH_ZO;
+		using glm::orthoZO;
+		using glm::outerProduct;
+		using glm::perspective;
+		using glm::perspectiveFov;
+		using glm::perspectiveFovLH;
+		using glm::perspectiveFovLH_NO;
+		using glm::perspectiveFovLH_ZO;
+		using glm::perspectiveFovNO;
+		using glm::perspectiveFovRH;
+		using glm::perspectiveFovRH_NO;
+		using glm::perspectiveFovRH_ZO;
+		using glm::perspectiveFovZO;
+		using glm::perspectiveLH;
+		using glm::perspectiveLH_NO;
+		using glm::perspectiveLH_ZO;
+		using glm::perspectiveNO;
+		using glm::perspectiveRH;
+		using glm::perspectiveRH_NO;
+		using glm::perspectiveRH_ZO;
+		using glm::perspectiveZO;
+		using glm::pi;
+		using glm::pickMatrix;
+		using glm::pow;
+		using glm::prevFloat;
+		using glm::prevMultiple;
+		using glm::prevPowerOfTwo;
+		using glm::project;
+		using glm::projectNO;
+		using glm::projectZO;
+		using glm::quarter_pi;
+		using glm::radians;
+		using glm::reflect;
+		using glm::refract;
+		using glm::repeat;
+		using glm::root_five;
+		using glm::root_half_pi;
+		using glm::root_ln_four;
+		using glm::root_pi;
+		using glm::root_three;
+		using glm::root_two;
+		using glm::root_two_pi;
+		using glm::rotate;
+		using glm::round;
+		using glm::roundEven;
+		using glm::scale;
+		using glm::sec;
+		using glm::sech;
+		using glm::sign;
+		using glm::sin;
+		using glm::sinh;
+		using glm::slerp;
+		using glm::smoothstep;
+		using glm::sqrt;
+		using glm::step;
+		using glm::tan;
+		using glm::tanh;
+		using glm::third;
+		using glm::three_over_two_pi;
+		using glm::translate;
+		using glm::transpose;
+		using glm::trunc;
+		using glm::tweakedInfinitePerspective;
+		using glm::two_over_pi;
+		using glm::two_over_root_pi;
+		using glm::two_pi;
+		using glm::two_thirds;
+		using glm::uintBitsToFloat;
+		using glm::unProject;
+		using glm::unProjectNO;
+		using glm::unProjectZO;
+		using glm::uround;
+		using glm::zero;
+	}
+
+#   ifdef GLM_ENABLE_EXPERIMENTAL
+#   ifdef GLM_GTX_INLINE_NAMESPACE
+	inline
+#   endif
+	namespace gtx {
+		using glm::io::order_type;
+		using glm::io::format_punct;
+		using glm::io::basic_state_saver;
+		using glm::io::basic_format_saver;
+		using glm::io::precision;
+		using glm::io::width;
+		using glm::io::delimeter;
+		using glm::io::order;
+		using glm::io::get_facet;
+		using glm::io::formatted;
+		using glm::io::unformatted;
+		using glm::io::operator<<;
+		using glm::operator<<;
+		using glm::tdualquat;
+
+#       if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP))
+		using glm::to_string;
+#       endif
+#       if GLM_HAS_TEMPLATE_ALIASES
+		using glm::operator*;
+		using glm::operator/;
+#       endif
+#       if GLM_HAS_RANGE_FOR
+		using glm::components;
+		using glm::begin;
+		using glm::end;
+#       endif
+
+		using glm::abs;
+		using glm::acos;
+		using glm::acosh;
+		using glm::adjugate;
+		using glm::all;
+		using glm::angle;
+		using glm::angleAxis;
+		using glm::any;
+		using glm::areCollinear;
+		using glm::areOrthogonal;
+		using glm::areOrthonormal;
+		using glm::asin;
+		using glm::asinh;
+		using glm::associatedMax;
+		using glm::associatedMin;
+		using glm::atan;
+		using glm::atanh;
+		using glm::axis;
+		using glm::axisAngle;
+		using glm::axisAngleMatrix;
+		using glm::backEaseIn;
+		using glm::backEaseInOut;
+		using glm::backEaseOut;
+		using glm::bitCount;
+		using glm::bitfieldDeinterleave;
+		using glm::bitfieldExtract;
+		using glm::bitfieldFillOne;
+		using glm::bitfieldFillZero;
+		using glm::bitfieldInsert;
+		using glm::bitfieldInterleave;
+		using glm::bitfieldReverse;
+		using glm::bitfieldRotateLeft;
+		using glm::bitfieldRotateRight;
+		using glm::bounceEaseIn;
+		using glm::bounceEaseInOut;
+		using glm::bounceEaseOut;
+		using glm::catmullRom;
+		using glm::ceil;
+		using glm::circularEaseIn;
+		using glm::circularEaseInOut;
+		using glm::circularEaseOut;
+		using glm::clamp;
+		using glm::closeBounded;
+		using glm::closestPointOnLine;
+		using glm::colMajor2;
+		using glm::colMajor3;
+		using glm::colMajor4;
+		using glm::compAdd;
+		using glm::compMax;
+		using glm::compMin;
+		using glm::compMul;
+		using glm::compNormalize;
+		using glm::compScale;
+		using glm::computeCovarianceMatrix;
+		using glm::conjugate;
+		using glm::convertD65XYZToD50XYZ;
+		using glm::convertD65XYZToLinearSRGB;
+		using glm::convertLinearSRGBToD50XYZ;
+		using glm::convertLinearSRGBToD65XYZ;
+		using glm::cos;
+		using glm::cos_one_over_two;
+		using glm::cosh;
+		using glm::cross;
+		using glm::cubic;
+		using glm::cubicEaseIn;
+		using glm::cubicEaseInOut;
+		using glm::cubicEaseOut;
+		using glm::decompose;
+		using glm::degrees;
+		using glm::derivedEulerAngleX;
+		using glm::derivedEulerAngleY;
+		using glm::derivedEulerAngleZ;
+		using glm::determinant;
+		using glm::diagonal2x2;
+		using glm::diagonal2x3;
+		using glm::diagonal2x4;
+		using glm::diagonal3x2;
+		using glm::diagonal3x3;
+		using glm::diagonal3x4;
+		using glm::diagonal4x2;
+		using glm::diagonal4x3;
+		using glm::diagonal4x4;
+		using glm::distance;
+		using glm::distance2;
+		using glm::dot;
+		using glm::dual_quat_identity;
+		using glm::dualquat_cast;
+		using glm::e;
+		using glm::elasticEaseIn;
+		using glm::elasticEaseInOut;
+		using glm::elasticEaseOut;
+		using glm::epsilon;
+		using glm::epsilonEqual;
+		using glm::epsilonNotEqual;
+		using glm::equal;
+		using glm::euclidean;
+		using glm::euler;
+		using glm::eulerAngleX;
+		using glm::eulerAngleXY;
+		using glm::eulerAngleXYX;
+		using glm::eulerAngleXYZ;
+		using glm::eulerAngleXZ;
+		using glm::eulerAngleXZX;
+		using glm::eulerAngleXZY;
+		using glm::eulerAngleY;
+		using glm::eulerAngleYX;
+		using glm::eulerAngleYXY;
+		using glm::eulerAngleYXZ;
+		using glm::eulerAngleYZ;
+		using glm::eulerAngleYZX;
+		using glm::eulerAngleYZY;
+		using glm::eulerAngleZ;
+		using glm::eulerAngleZX;
+		using glm::eulerAngleZXY;
+		using glm::eulerAngleZXZ;
+		using glm::eulerAngleZY;
+		using glm::eulerAngleZYX;
+		using glm::eulerAngleZYZ;
+		using glm::eulerAngles;
+		using glm::exp;
+		using glm::exp2;
+		using glm::exponentialEaseIn;
+		using glm::exponentialEaseInOut;
+		using glm::exponentialEaseOut;
+		using glm::extend;
+		using glm::extractEulerAngleXYX;
+		using glm::extractEulerAngleXYZ;
+		using glm::extractEulerAngleXZX;
+		using glm::extractEulerAngleXZY;
+		using glm::extractEulerAngleYXY;
+		using glm::extractEulerAngleYXZ;
+		using glm::extractEulerAngleYZX;
+		using glm::extractEulerAngleYZY;
+		using glm::extractEulerAngleZXY;
+		using glm::extractEulerAngleZXZ;
+		using glm::extractEulerAngleZYX;
+		using glm::extractEulerAngleZYZ;
+		using glm::extractMatrixRotation;
+		using glm::extractRealComponent;
+		using glm::faceforward;
+		using glm::factorial;
+		using glm::fastAcos;
+		using glm::fastAsin;
+		using glm::fastAtan;
+		using glm::fastCos;
+		using glm::fastDistance;
+		using glm::fastExp;
+		using glm::fastExp2;
+		using glm::fastInverseSqrt;
+		using glm::fastLength;
+		using glm::fastLog;
+		using glm::fastLog2;
+		using glm::fastMix;
+		using glm::fastNormalize;
+		using glm::fastNormalizeDot;
+		using glm::fastPow;
+		using glm::fastSin;
+		using glm::fastSqrt;
+		using glm::fastTan;
+		using glm::fclamp;
+		using glm::findLSB;
+		using glm::findMSB;
+		using glm::fliplr;
+		using glm::flipud;
+		using glm::floatBitsToInt;
+		using glm::floatBitsToUint;
+		using glm::floor;
+		using glm::floor_log2;
+		using glm::fma;
+		using glm::fmax;
+		using glm::fmin;
+		using glm::fmod;
+		using glm::four_over_pi;
+		using glm::fract;
+		using glm::frexp;
+		using glm::frustum;
+		using glm::frustumLH;
+		using glm::frustumLH_NO;
+		using glm::frustumLH_ZO;
+		using glm::frustumNO;
+		using glm::frustumRH;
+		using glm::frustumRH_NO;
+		using glm::frustumRH_ZO;
+		using glm::frustumZO;
+		using glm::gauss;
+		using glm::golden_ratio;
+		using glm::greaterThan;
+		using glm::greaterThanEqual;
+		using glm::half_pi;
+		using glm::hermite;
+		using glm::highestBitValue;
+		using glm::hsvColor;
+		using glm::identity;
+		using glm::imulExtended;
+		using glm::infinitePerspective;
+		using glm::infinitePerspectiveLH;
+		using glm::infinitePerspectiveRH;
+		using glm::intBitsToFloat;
+		using glm::intermediate;
+		using glm::interpolate;
+		using glm::intersectLineSphere;
+		using glm::intersectLineTriangle;
+		using glm::intersectRayPlane;
+		using glm::intersectRaySphere;
+		using glm::intersectRayTriangle;
+		using glm::inverse;
+		using glm::inversesqrt;
+		using glm::iround;
+		using glm::isCompNull;
+		using glm::isIdentity;
+		using glm::isNormalized;
+		using glm::isNull;
+		using glm::isOrthogonal;
+		using glm::isdenormal;
+		using glm::isfinite;
+		using glm::isinf;
+		using glm::isnan;
+		using glm::l1Norm;
+		using glm::l2Norm;
+		using glm::lMaxNorm;
+		using glm::ldexp;
+		using glm::leftHanded;
+		using glm::length;
+		using glm::length2;
+		using glm::lerp;
+		using glm::lessThan;
+		using glm::lessThanEqual;
+		using glm::linearGradient;
+		using glm::linearInterpolation;
+		using glm::ln_ln_two;
+		using glm::ln_ten;
+		using glm::ln_two;
+		using glm::log;
+		using glm::log2;
+		using glm::lookAt;
+		using glm::lookAtLH;
+		using glm::lookAtRH;
+		using glm::lowestBitValue;
+		using glm::luminosity;
+		using glm::lxNorm;
+		using glm::make_mat2;
+		using glm::make_mat2x2;
+		using glm::make_mat2x3;
+		using glm::make_mat2x4;
+		using glm::make_mat3;
+		using glm::make_mat3x2;
+		using glm::make_mat3x3;
+		using glm::make_mat3x4;
+		using glm::make_mat4;
+		using glm::make_mat4x2;
+		using glm::make_mat4x3;
+		using glm::make_mat4x4;
+		using glm::make_quat;
+		using glm::make_vec1;
+		using glm::make_vec2;
+		using glm::make_vec3;
+		using glm::make_vec4;
+		using glm::mask;
+		using glm::mat2x4_cast;
+		using glm::mat3_cast;
+		using glm::mat3x4_cast;
+		using glm::mat4_cast;
+		using glm::matrixCompMult;
+		using glm::matrixCross3;
+		using glm::matrixCross4;
+		using glm::max;
+		using glm::min;
+		using glm::mirrorClamp;
+		using glm::mirrorRepeat;
+		using glm::mix;
+		using glm::mixedProduct;
+		using glm::mod;
+		using glm::modf;
+		using glm::nlz;
+		using glm::normalize;
+		using glm::normalizeDot;
+		using glm::notEqual;
+		using glm::not_;
+		using glm::YCoCg2rgb;
+		using glm::YCoCgR2rgb;
+		using glm::one;
+		using glm::one_over_pi;
+		using glm::one_over_root_two;
+		using glm::one_over_two_pi;
+		using glm::openBounded;
+		using glm::orientate2;
+		using glm::orientate3;
+		using glm::orientate4;
+		using glm::orientation;
+		using glm::orientedAngle;
+		using glm::ortho;
+		using glm::orthoLH;
+		using glm::orthoLH_NO;
+		using glm::orthoLH_ZO;
+		using glm::orthoNO;
+		using glm::orthoRH;
+		using glm::orthoRH_NO;
+		using glm::orthoRH_ZO;
+		using glm::orthoZO;
+		using glm::orthonormalize;
+		using glm::outerProduct;
+		using glm::packDouble2x32;
+		using glm::packHalf2x16;
+		using glm::packSnorm2x16;
+		using glm::packSnorm4x8;
+		using glm::packUnorm2x16;
+		using glm::packUnorm4x8;
+		using glm::perp;
+		using glm::perspective;
+		using glm::perspectiveFov;
+		using glm::perspectiveFovLH;
+		using glm::perspectiveFovLH_NO;
+		using glm::perspectiveFovLH_ZO;
+		using glm::perspectiveFovNO;
+		using glm::perspectiveFovRH;
+		using glm::perspectiveFovRH_NO;
+		using glm::perspectiveFovRH_ZO;
+		using glm::perspectiveFovZO;
+		using glm::perspectiveLH;
+		using glm::perspectiveLH_NO;
+		using glm::perspectiveLH_ZO;
+		using glm::perspectiveNO;
+		using glm::perspectiveRH;
+		using glm::perspectiveRH_NO;
+		using glm::perspectiveRH_ZO;
+		using glm::perspectiveZO;
+		using glm::pi;
+		using glm::pickMatrix;
+		using glm::pitch;
+		using glm::polar;
+		using glm::pow;
+		using glm::pow2;
+		using glm::pow3;
+		using glm::pow4;
+		using glm::powerOfTwoAbove;
+		using glm::powerOfTwoBelow;
+		using glm::powerOfTwoNearest;
+		using glm::proj;
+		using glm::proj2D;
+		using glm::proj3D;
+		using glm::project;
+		using glm::projectNO;
+		using glm::projectZO;
+		using glm::qr_decompose;
+		using glm::quadraticEaseIn;
+		using glm::quadraticEaseInOut;
+		using glm::quadraticEaseOut;
+		using glm::quarter_pi;
+		using glm::quarticEaseIn;
+		using glm::quarticEaseInOut;
+		using glm::quarticEaseOut;
+		using glm::quatLookAt;
+		using glm::quatLookAtLH;
+		using glm::quatLookAtRH;
+		using glm::quat_cast;
+		using glm::quat_identity;
+		using glm::quinticEaseIn;
+		using glm::quinticEaseInOut;
+		using glm::quinticEaseOut;
+		using glm::radialGradient;
+		using glm::radians;
+		using glm::recompose;
+		using glm::reflect;
+		using glm::refract;
+		using glm::repeat;
+		using glm::rgb2YCoCg;
+		using glm::rgb2YCoCgR;
+		using glm::rgbColor;
+		using glm::rightHanded;
+		using glm::roll;
+		using glm::root_five;
+		using glm::root_half_pi;
+		using glm::root_ln_four;
+		using glm::root_pi;
+		using glm::root_three;
+		using glm::root_two;
+		using glm::root_two_pi;
+		using glm::rotate;
+		using glm::rotateNormalizedAxis;
+		using glm::rotateX;
+		using glm::rotateY;
+		using glm::rotateZ;
+		using glm::rotation;
+		using glm::round;
+		using glm::roundEven;
+		using glm::rowMajor2;
+		using glm::rowMajor3;
+		using glm::rowMajor4;
+		using glm::rq_decompose;
+		using glm::saturation;
+		using glm::scale;
+		using glm::scaleBias;
+		using glm::shearX2D;
+		using glm::shearX3D;
+		using glm::shearY2D;
+		using glm::shearY3D;
+		using glm::shearZ3D;
+		using glm::shortMix;
+		using glm::sign;
+		using glm::sin;
+		using glm::sineEaseIn;
+		using glm::sineEaseInOut;
+		using glm::sineEaseOut;
+		using glm::sinh;
+		using glm::slerp;
+		using glm::smoothstep;
+		using glm::sortEigenvalues;
+		using glm::sqrt;
+		using glm::squad;
+		using glm::step;
+		using glm::tan;
+		using glm::tanh;
+		using glm::third;
+		using glm::three_over_two_pi;
+		using glm::translate;
+		using glm::transpose;
+		using glm::triangleNormal;
+		using glm::trunc;
+		using glm::tweakedInfinitePerspective;
+		using glm::two_over_pi;
+		using glm::two_over_root_pi;
+		using glm::two_pi;
+		using glm::two_thirds;
+		using glm::uaddCarry;
+		using glm::uintBitsToFloat;
+		using glm::umulExtended;
+		using glm::unProject;
+		using glm::unProjectNO;
+		using glm::unProjectZO;
+		using glm::unpackDouble2x32;
+		using glm::unpackHalf2x16;
+		using glm::unpackSnorm2x16;
+		using glm::unpackSnorm4x8;
+		using glm::unpackUnorm2x16;
+		using glm::unpackUnorm4x8;
+		using glm::uround;
+		using glm::usubBorrow;
+		using glm::value_ptr;
+		using glm::wrapAngle;
+		using glm::wxyz;
+		using glm::yaw;
+		using glm::yawPitchRoll;
+		using glm::zero;
+	}
+#   endif
+}
+
+#if defined(_MSC_VER) // Workaround
+// Partial template specialization doesn't need to be exported explicitly, but this may not work otherwise on MSVC.
+export namespace std {
+	using std::hash; // See GLM_GTX_hash
+}
+#endif

+ 47 - 0
glm/gtx/number_precision.hpp

@@ -0,0 +1,47 @@
+/// @ref gtx_number_precision
+/// @file glm/gtx/number_precision.hpp
+///
+/// @see core (dependence)
+/// @see gtc_type_precision (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_number_precision GLM_GTX_number_precision
+/// @ingroup gtx
+///
+/// Include <glm/gtx/number_precision.hpp> to use the features of this extension.
+///
+/// Defined size types.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+
+#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
+#	ifndef GLM_ENABLE_EXPERIMENTAL
+#		pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.")
+#	else
+#		pragma message("GLM: GLM_GTX_number_precision extension included")
+#	endif
+#endif
+
+namespace glm{
+	/////////////////////////////
+	// Unsigned int vector types
+
+	/// @addtogroup gtx_number_precision
+	/// @{
+
+	//////////////////////
+	// Float matrix types
+
+	typedef f32			f32mat1;	//!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
+	typedef f32			f32mat1x1;	//!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
+	typedef f64			f64mat1;	//!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
+	typedef f64			f64mat1x1;	//!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)
+
+	/// @}
+}//namespace glm
+
+#include "number_precision.inl"