1#ifndef GLM_SETUP_INCLUDED
6#define GLM_VERSION_MAJOR 1
7#define GLM_VERSION_MINOR 0
8#define GLM_VERSION_PATCH 1
9#define GLM_VERSION_REVISION 0
10#define GLM_VERSION 1000
11#define GLM_VERSION_MESSAGE "GLM: version 1.0.1"
13#define GLM_MAKE_API_VERSION(variant, major, minor, patch) \
14 ((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
16#define GLM_VERSION_COMPLETE GLM_MAKE_API_VERSION(0, GLM_VERSION_MAJOR, GLM_VERSION_MINOR, GLM_VERSION_PATCH)
18#define GLM_SETUP_INCLUDED GLM_VERSION
20#define GLM_GET_VERSION_VARIANT(version) ((uint32_t)(version) >> 29U)
21#define GLM_GET_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU)
22#define GLM_GET_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU)
23#define GLM_GET_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
34#if defined(GLM_FORCE_MESSAGES)
35# define GLM_MESSAGES GLM_ENABLE
37# define GLM_MESSAGES GLM_DISABLE
43#include "../simd/platform.h"
48#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
49# define GLM_MODEL GLM_MODEL_64
50#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM)
51# define GLM_MODEL GLM_MODEL_32
53# define GLM_MODEL GLM_MODEL_32
56#if !defined(GLM_MODEL) && GLM_COMPILER != 0
57# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
65#define GLM_LANG_CXX98_FLAG (1 << 1)
66#define GLM_LANG_CXX03_FLAG (1 << 2)
67#define GLM_LANG_CXX0X_FLAG (1 << 3)
68#define GLM_LANG_CXX11_FLAG (1 << 4)
69#define GLM_LANG_CXX14_FLAG (1 << 5)
70#define GLM_LANG_CXX17_FLAG (1 << 6)
71#define GLM_LANG_CXX20_FLAG (1 << 7)
72#define GLM_LANG_CXXMS_FLAG (1 << 8)
73#define GLM_LANG_CXXGNU_FLAG (1 << 9)
75#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
76#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
77#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
78#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
79#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)
80#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)
81#define GLM_LANG_CXX20 (GLM_LANG_CXX17 | GLM_LANG_CXX20_FLAG)
82#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
83#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
85#if (defined(_MSC_EXTENSIONS))
86# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG
87#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT))
88# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG
90# define GLM_LANG_EXT 0
93#if (defined(GLM_FORCE_CXX_UNKNOWN))
95#elif defined(GLM_FORCE_CXX20)
96# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
97# define GLM_LANG_STL11_FORCED
98#elif defined(GLM_FORCE_CXX17)
99# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
100# define GLM_LANG_STL11_FORCED
101#elif defined(GLM_FORCE_CXX14)
102# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
103# define GLM_LANG_STL11_FORCED
104#elif defined(GLM_FORCE_CXX11)
105# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
106# define GLM_LANG_STL11_FORCED
107#elif defined(GLM_FORCE_CXX03)
108# define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)
109#elif defined(GLM_FORCE_CXX98)
110# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)
112# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG)
113# if GLM_COMPILER >= GLM_COMPILER_VC15_7
114# define GLM_LANG_PLATFORM _MSVC_LANG
115# elif GLM_COMPILER >= GLM_COMPILER_VC15
116# if _MSVC_LANG > 201402L
117# define GLM_LANG_PLATFORM 201402L
119# define GLM_LANG_PLATFORM _MSVC_LANG
122# define GLM_LANG_PLATFORM 0
125# define GLM_LANG_PLATFORM 0
128# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
129# define GLM_LANG (GLM_LANG_CXX20 | GLM_LANG_EXT)
130# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L
131# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
132# elif __cplusplus == 201402L || __cplusplus == 201406L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L
133# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
134# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L
135# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
136# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)
137# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)
138# elif __cplusplus == 199711L
139# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)
141# define GLM_LANG (0 | GLM_LANG_EXT)
153#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)
154# define GLM_HAS_CXX11_STL 0
155#elif (GLM_COMPILER & GLM_COMPILER_CUDA_RTC) == GLM_COMPILER_CUDA_RTC
156# define GLM_HAS_CXX11_STL 0
157#elif (GLM_COMPILER & GLM_COMPILER_HIP)
158# define GLM_HAS_CXX11_STL 0
159#elif GLM_COMPILER & GLM_COMPILER_CLANG
160# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))
161# define GLM_HAS_CXX11_STL 1
163# define GLM_HAS_CXX11_STL 0
165#elif GLM_LANG & GLM_LANG_CXX11_FLAG
166# define GLM_HAS_CXX11_STL 1
168# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
169 ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
170 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
171 ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))
175#if GLM_COMPILER & GLM_COMPILER_CLANG
176# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
177#elif GLM_LANG & GLM_LANG_CXX11_FLAG
178# define GLM_HAS_STATIC_ASSERT 1
180# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
181 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
182 ((GLM_COMPILER & GLM_COMPILER_VC)) || \
183 ((GLM_COMPILER & GLM_COMPILER_HIP))))
187#if GLM_LANG & GLM_LANG_CXX11_FLAG
188# define GLM_HAS_EXTENDED_INTEGER_TYPE 1
190# define GLM_HAS_EXTENDED_INTEGER_TYPE (\
191 ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \
192 ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
193 ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)) || \
194 ((GLM_COMPILER & GLM_COMPILER_HIP)))
198#if GLM_COMPILER & GLM_COMPILER_CLANG
199# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
200#elif GLM_LANG & GLM_LANG_CXX11_FLAG
201# define GLM_HAS_INITIALIZER_LISTS 1
203# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
204 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
205 ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
206 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
207 ((GLM_COMPILER & GLM_COMPILER_HIP))))
211#if GLM_COMPILER & GLM_COMPILER_CLANG
212# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
213#elif GLM_LANG & GLM_LANG_CXX11_FLAG
214# define GLM_HAS_UNRESTRICTED_UNIONS 1
216# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
217 (GLM_COMPILER & GLM_COMPILER_VC) || \
218 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
219 ((GLM_COMPILER & GLM_COMPILER_HIP)))
223#if GLM_COMPILER & GLM_COMPILER_CLANG
224# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
225#elif GLM_LANG & GLM_LANG_CXX11_FLAG
226# define GLM_HAS_DEFAULTED_FUNCTIONS 1
228# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
229 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
230 ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
231 (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
232 ((GLM_COMPILER & GLM_COMPILER_HIP)))
236#if GLM_COMPILER & GLM_COMPILER_CLANG
237# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
238#elif GLM_LANG & GLM_LANG_CXX11_FLAG
239# define GLM_HAS_RVALUE_REFERENCES 1
241# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
242 ((GLM_COMPILER & GLM_COMPILER_VC)) || \
243 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
244 ((GLM_COMPILER & GLM_COMPILER_HIP))))
248#if GLM_COMPILER & GLM_COMPILER_CLANG
249# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
250#elif GLM_LANG & GLM_LANG_CXX11_FLAG
251# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
253# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
254 ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
255 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
256 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
257 ((GLM_COMPILER & GLM_COMPILER_HIP))))
261#if GLM_COMPILER & GLM_COMPILER_CLANG
262# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
263#elif GLM_LANG & GLM_LANG_CXX11_FLAG
264# define GLM_HAS_TEMPLATE_ALIASES 1
266# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
267 ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
268 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
269 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
270 ((GLM_COMPILER & GLM_COMPILER_HIP))))
274#if GLM_COMPILER & GLM_COMPILER_CLANG
275# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
276#elif GLM_LANG & GLM_LANG_CXX11_FLAG
277# define GLM_HAS_RANGE_FOR 1
279# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
280 ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
281 ((GLM_COMPILER & GLM_COMPILER_VC)) || \
282 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
283 ((GLM_COMPILER & GLM_COMPILER_HIP))))
287#if GLM_COMPILER & GLM_COMPILER_CLANG
288# define GLM_HAS_ALIGNOF __has_feature(cxx_alignas)
289#elif GLM_LANG & GLM_LANG_CXX11_FLAG
290# define GLM_HAS_ALIGNOF 1
292# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
293 ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
294 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \
295 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
296 ((GLM_COMPILER & GLM_COMPILER_HIP))))
301#if (GLM_ARCH & GLM_ARCH_SIMD_BIT)
302# define GLM_HAS_CONSTEXPR 0
303#elif (GLM_COMPILER & GLM_COMPILER_CLANG)
304# define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)
305#elif (GLM_LANG & GLM_LANG_CXX14_FLAG)
306# define GLM_HAS_CONSTEXPR 1
308# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\
309 ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \
310 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15))))
314# define GLM_CONSTEXPR constexpr
316# define GLM_CONSTEXPR
321# if (GLM_COMPILER & GLM_COMPILER_CLANG)
322# if __has_feature(cxx_if_constexpr)
323# define GLM_HAS_IF_CONSTEXPR 1
325# define GLM_HAS_IF_CONSTEXPR 0
327# elif (GLM_LANG & GLM_LANG_CXX17_FLAG)
328# define GLM_HAS_IF_CONSTEXPR 1
330# define GLM_HAS_IF_CONSTEXPR 0
333# define GLM_HAS_IF_CONSTEXPR 0
336#if GLM_HAS_IF_CONSTEXPR
337# define GLM_IF_CONSTEXPR if constexpr
339# define GLM_IF_CONSTEXPR if
343#if GLM_LANG & GLM_LANG_CXX17_FLAG
344# define GLM_NODISCARD [[nodiscard]]
346# define GLM_NODISCARD
350#if GLM_LANG & GLM_LANG_CXX11_FLAG
351# define GLM_HAS_ASSIGNABLE 1
353# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
354 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
355 ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))
359#define GLM_HAS_TRIVIAL_QUERIES 0
362#if GLM_LANG & GLM_LANG_CXX11_FLAG
363# define GLM_HAS_MAKE_SIGNED 1
365# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
366 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
367 ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
368 ((GLM_COMPILER & GLM_COMPILER_HIP))))
372#if defined(GLM_FORCE_INTRINSICS)
373# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
374 ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
375 ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))
377# define GLM_HAS_BITSCAN_WINDOWS 0
380#if GLM_LANG & GLM_LANG_CXX11_FLAG
381# define GLM_HAS_NOEXCEPT 1
383# define GLM_HAS_NOEXCEPT 0
387# define GLM_NOEXCEPT noexcept
395# if GLM_COMPILER & GLM_COMPILER_GCC
396# if GLM_COMPILER >= GLM_COMPILER_GCC61
397# define GLM_HAS_OPENMP 45
398# elif GLM_COMPILER >= GLM_COMPILER_GCC49
399# define GLM_HAS_OPENMP 40
400# elif GLM_COMPILER >= GLM_COMPILER_GCC47
401# define GLM_HAS_OPENMP 31
403# define GLM_HAS_OPENMP 0
405# elif GLM_COMPILER & GLM_COMPILER_CLANG
406# if GLM_COMPILER >= GLM_COMPILER_CLANG38
407# define GLM_HAS_OPENMP 31
409# define GLM_HAS_OPENMP 0
411# elif GLM_COMPILER & GLM_COMPILER_VC
412# define GLM_HAS_OPENMP 20
413# elif GLM_COMPILER & GLM_COMPILER_INTEL
414# if GLM_COMPILER >= GLM_COMPILER_INTEL16
415# define GLM_HAS_OPENMP 40
417# define GLM_HAS_OPENMP 0
420# define GLM_HAS_OPENMP 0
423# define GLM_HAS_OPENMP 0
429#if GLM_LANG & GLM_LANG_CXX0X_FLAG
430# define GLM_CONFIG_NULLPTR GLM_ENABLE
432# define GLM_CONFIG_NULLPTR GLM_DISABLE
435#if GLM_CONFIG_NULLPTR == GLM_ENABLE
436# define GLM_NULLPTR nullptr
438# define GLM_NULLPTR 0
444#if GLM_HAS_STATIC_ASSERT
445# define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
446#elif GLM_COMPILER & GLM_COMPILER_VC
447# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
449# define GLM_STATIC_ASSERT(x, message) assert(x)
457#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)
458# if defined(GLM_CUDA_FORCE_DEVICE_FUNC) && defined(GLM_CUDA_FORCE_HOST_FUNC)
459# error "GLM error: GLM_CUDA_FORCE_DEVICE_FUNC and GLM_CUDA_FORCE_HOST_FUNC should not be defined at the same time, GLM by default generates both device and host code for CUDA compiler."
462# if defined(GLM_CUDA_FORCE_DEVICE_FUNC)
463# define GLM_CUDA_FUNC_DEF __device__
464# define GLM_CUDA_FUNC_DECL __device__
465# elif defined(GLM_CUDA_FORCE_HOST_FUNC)
466# define GLM_CUDA_FUNC_DEF __host__
467# define GLM_CUDA_FUNC_DECL __host__
469# define GLM_CUDA_FUNC_DEF __device__ __host__
470# define GLM_CUDA_FUNC_DECL __device__ __host__
473# define GLM_CUDA_FUNC_DEF
474# define GLM_CUDA_FUNC_DECL
477#if defined(GLM_FORCE_INLINE)
478# if GLM_COMPILER & GLM_COMPILER_VC
479# define GLM_INLINE __forceinline
480# define GLM_NEVER_INLINE __declspec(noinline)
481# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
482# define GLM_INLINE inline __attribute__((__always_inline__))
483# define GLM_NEVER_INLINE __attribute__((__noinline__))
484# elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)
485# define GLM_INLINE __forceinline__
486# define GLM_NEVER_INLINE __noinline__
488# define GLM_INLINE inline
489# define GLM_NEVER_INLINE
492# define GLM_INLINE inline
493# define GLM_NEVER_INLINE
496#define GLM_CTOR_DECL GLM_CUDA_FUNC_DECL GLM_CONSTEXPR
497#define GLM_FUNC_DISCARD_DECL GLM_CUDA_FUNC_DECL
498#define GLM_FUNC_DECL GLM_NODISCARD GLM_CUDA_FUNC_DECL
499#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
502#if GLM_HAS_DEFAULTED_FUNCTIONS
503# define GLM_DEFAULTED_FUNC_DECL
504# define GLM_DEFAULTED_FUNC_QUALIFIER GLM_INLINE
506# define GLM_DEFAULTED_FUNC_DECL GLM_FUNC_DISCARD_DECL
507# define GLM_DEFAULTED_FUNC_QUALIFIER GLM_FUNC_QUALIFIER
509#if !defined(GLM_FORCE_CTOR_INIT)
510# define GLM_DEFAULTED_DEFAULT_CTOR_DECL GLM_CUDA_FUNC_DECL
511# define GLM_DEFAULTED_DEFAULT_CTOR_QUALIFIER GLM_DEFAULTED_FUNC_QUALIFIER
513# define GLM_DEFAULTED_DEFAULT_CTOR_DECL GLM_FUNC_DISCARD_DECL
514# define GLM_DEFAULTED_DEFAULT_CTOR_QUALIFIER GLM_FUNC_QUALIFIER
522#define GLM_SWIZZLE_DISABLED 0
523#define GLM_SWIZZLE_OPERATOR 1
524#define GLM_SWIZZLE_FUNCTION 2
526#if defined(GLM_SWIZZLE)
527# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.")
528# define GLM_FORCE_SWIZZLE
531#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && !defined(GLM_FORCE_XYZW_ONLY)
532# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR
533#elif defined(GLM_FORCE_SWIZZLE)
534# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION
536# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED
544#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
545# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE
547# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE
555#ifdef GLM_FORCE_UNRESTRICTED_FLOAT
556# define GLM_CONFIG_UNRESTRICTED_FLOAT GLM_ENABLE
558# define GLM_CONFIG_UNRESTRICTED_FLOAT GLM_DISABLE
567#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0)
568#define GLM_CLIP_CONTROL_NO_BIT (1 << 1)
569#define GLM_CLIP_CONTROL_LH_BIT (1 << 2)
570#define GLM_CLIP_CONTROL_RH_BIT (1 << 3)
572#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)
573#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)
574#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)
575#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)
577#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE
578# ifdef GLM_FORCE_LEFT_HANDED
579# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO
581# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO
584# ifdef GLM_FORCE_LEFT_HANDED
585# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO
587# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO
594#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
595# define GLM_DEPRECATED __declspec(deprecated)
596# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
597#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)
598# define GLM_DEPRECATED __attribute__((__deprecated__))
599# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
600#elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)
601# define GLM_DEPRECATED
602# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)
604# define GLM_DEPRECATED
605# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
610#ifdef GLM_FORCE_EXPLICIT_CTOR
611# define GLM_EXPLICIT explicit
621#define GLM_LENGTH_INT 1
622#define GLM_LENGTH_SIZE_T 2
624#ifdef GLM_FORCE_SIZE_T_LENGTH
625# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T
626# define GLM_ASSERT_LENGTH(l, max) (assert ((l) < (max)))
628# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT
629# define GLM_ASSERT_LENGTH(l, max) (assert ((l) >= 0 && (l) < (max)))
635# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T
636 typedef size_t length_t;
638 typedef int length_t;
646# define GLM_CONFIG_CONSTEXP GLM_ENABLE
650 template<
typename T, std::
size_t N>
651 constexpr std::size_t countof(T
const (&)[N])
656# define GLM_COUNTOF(arr) glm::countof(arr)
657#elif defined(_MSC_VER)
658# define GLM_CONFIG_CONSTEXP GLM_DISABLE
660# define GLM_COUNTOF(arr) _countof(arr)
662# define GLM_CONFIG_CONSTEXP GLM_DISABLE
664# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
676 enum test {value = 0};
680 struct is_int<unsigned int>
682 enum test {value = ~0};
686 struct is_int<signed int>
688 enum test {value = ~0};
692 typedef unsigned int uint;
698#if GLM_HAS_EXTENDED_INTEGER_TYPE
705# if GLM_HAS_EXTENDED_INTEGER_TYPE
706 typedef std::uint64_t uint64;
707 typedef std::int64_t int64;
708# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
711# elif GLM_COMPILER & GLM_COMPILER_VC
712 typedef unsigned __int64 uint64;
713 typedef signed __int64 int64;
714# elif GLM_COMPILER & GLM_COMPILER_GCC
715# pragma GCC diagnostic ignored "-Wlong-long"
716 __extension__
typedef unsigned long long uint64;
717 __extension__
typedef signed long long int64;
718# elif (GLM_COMPILER & GLM_COMPILER_CLANG)
719# pragma clang diagnostic ignored "-Wc++11-long-long"
720 typedef unsigned long long uint64;
721 typedef signed long long int64;
723 typedef unsigned long long uint64;
724 typedef signed long long int64;
732#if GLM_HAS_MAKE_SIGNED
733# include <type_traits>
738 using std::make_unsigned;
747 template<
typename genType>
752 struct make_unsigned<char>
754 typedef unsigned char type;
758 struct make_unsigned<signed char>
760 typedef unsigned char type;
764 struct make_unsigned<short>
766 typedef unsigned short type;
770 struct make_unsigned<int>
772 typedef unsigned int type;
776 struct make_unsigned<long>
778 typedef unsigned long type;
782 struct make_unsigned<int64>
788 struct make_unsigned<unsigned char>
790 typedef unsigned char type;
794 struct make_unsigned<unsigned short>
796 typedef unsigned short type;
800 struct make_unsigned<unsigned int>
802 typedef unsigned int type;
806 struct make_unsigned<unsigned long>
808 typedef unsigned long type;
812 struct make_unsigned<uint64>
823#ifdef GLM_FORCE_XYZW_ONLY
824# define GLM_CONFIG_XYZW_ONLY GLM_ENABLE
826# define GLM_CONFIG_XYZW_ONLY GLM_DISABLE
832#define GLM_CTOR_INIT_DISABLE 0
833#define GLM_CTOR_INITIALIZER_LIST 1
834#define GLM_CTOR_INITIALISATION 2
836#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS
837# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST
838#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS
839# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION
841# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE
847#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)
848# define GLM_CONFIG_SIMD GLM_ENABLE
850# define GLM_CONFIG_SIMD GLM_DISABLE
856#if GLM_HAS_DEFAULTED_FUNCTIONS
857# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE
858# define GLM_DEFAULT = default
860# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE
864#if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE && GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE
865# define GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_ENABLE
866# define GLM_DEFAULT_CTOR GLM_DEFAULT
868# define GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_DISABLE
869# define GLM_DEFAULT_CTOR
875#ifdef GLM_FORCE_ALIGNED
876# define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
879#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
880# define GLM_FORCE_ALIGNED_GENTYPES
883#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))
884# define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE
886# define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE
892#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))
893# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE
895# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE
901#ifdef GLM_FORCE_WARNINGS
902# define GLM_SILENT_WARNINGS GLM_DISABLE
904# define GLM_SILENT_WARNINGS GLM_ENABLE
914#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)
915# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP
916#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)
917# define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP
918#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)
919# define GLM_CONFIG_PRECISION_BOOL GLM_LOWP
921# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP
924#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)
925# define GLM_CONFIG_PRECISION_INT GLM_HIGHP
926#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)
927# define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP
928#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)
929# define GLM_CONFIG_PRECISION_INT GLM_LOWP
931# define GLM_CONFIG_PRECISION_INT GLM_HIGHP
934#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)
935# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP
936#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)
937# define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP
938#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)
939# define GLM_CONFIG_PRECISION_UINT GLM_LOWP
941# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP
944#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)
945# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP
946#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)
947# define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP
948#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)
949# define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP
951# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP
954#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)
955# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP
956#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)
957# define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP
958#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)
959# define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP
961# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP
967#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION))
968# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error."
969#elif GLM_SETUP_INCLUDED == GLM_VERSION
974#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED)
975# define GLM_MESSAGE_DISPLAYED
976# define GLM_STR_HELPER(x) #x
977# define GLM_STR(x) GLM_STR_HELPER(x)
980# pragma message (GLM_STR(GLM_VERSION_MESSAGE))
983# if (GLM_LANG & GLM_LANG_CXX20_FLAG) && (GLM_LANG & GLM_LANG_EXT)
984# pragma message("GLM: C++ 20 with extensions")
985# elif (GLM_LANG & GLM_LANG_CXX20_FLAG)
986# pragma message("GLM: C++ 2A")
987# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT)
988# pragma message("GLM: C++ 17 with extensions")
989# elif (GLM_LANG & GLM_LANG_CXX17_FLAG)
990# pragma message("GLM: C++ 17")
991# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT)
992# pragma message("GLM: C++ 14 with extensions")
993# elif (GLM_LANG & GLM_LANG_CXX14_FLAG)
994# pragma message("GLM: C++ 14")
995# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT)
996# pragma message("GLM: C++ 11 with extensions")
997# elif (GLM_LANG & GLM_LANG_CXX11_FLAG)
998# pragma message("GLM: C++ 11")
999# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT)
1000# pragma message("GLM: C++ 0x with extensions")
1001# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG)
1002# pragma message("GLM: C++ 0x")
1003# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT)
1004# pragma message("GLM: C++ 03 with extensions")
1005# elif (GLM_LANG & GLM_LANG_CXX03_FLAG)
1006# pragma message("GLM: C++ 03")
1007# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT)
1008# pragma message("GLM: C++ 98 with extensions")
1009# elif (GLM_LANG & GLM_LANG_CXX98_FLAG)
1010# pragma message("GLM: C++ 98")
1012# pragma message("GLM: C++ language undetected")
1016# if GLM_COMPILER & GLM_COMPILER_CUDA
1017# pragma message("GLM: CUDA compiler detected")
1018# elif GLM_COMPILER & GLM_COMPILER_HIP
1019# pragma message("GLM: HIP compiler detected")
1020# elif GLM_COMPILER & GLM_COMPILER_VC
1021# pragma message("GLM: Visual C++ compiler detected")
1022# elif GLM_COMPILER & GLM_COMPILER_CLANG
1023# pragma message("GLM: Clang compiler detected")
1024# elif GLM_COMPILER & GLM_COMPILER_INTEL
1025# pragma message("GLM: Intel Compiler detected")
1026# elif GLM_COMPILER & GLM_COMPILER_GCC
1027# pragma message("GLM: GCC compiler detected")
1029# pragma message("GLM: Compiler not detected")
1033# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64)
1034# pragma message("GLM: x86 64 bits with AVX2 instruction set build target")
1035# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32)
1036# pragma message("GLM: x86 32 bits with AVX2 instruction set build target")
1038# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64)
1039# pragma message("GLM: x86 64 bits with AVX instruction set build target")
1040# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32)
1041# pragma message("GLM: x86 32 bits with AVX instruction set build target")
1043# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64)
1044# pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target")
1045# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32)
1046# pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target")
1048# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64)
1049# pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target")
1050# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32)
1051# pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target")
1053# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)
1054# pragma message("GLM: x86 64 bits with SSSE3 instruction set build target")
1055# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)
1056# pragma message("GLM: x86 32 bits with SSSE3 instruction set build target")
1058# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)
1059# pragma message("GLM: x86 64 bits with SSE3 instruction set build target")
1060# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)
1061# pragma message("GLM: x86 32 bits with SSE3 instruction set build target")
1063# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64)
1064# pragma message("GLM: x86 64 bits with SSE2 instruction set build target")
1065# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32)
1066# pragma message("GLM: x86 32 bits with SSE2 instruction set build target")
1068# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64)
1069# pragma message("GLM: x86 64 bits build target")
1070# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32)
1071# pragma message("GLM: x86 32 bits build target")
1073# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64)
1074# pragma message("GLM: ARM 64 bits with Neon instruction set build target")
1075# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32)
1076# pragma message("GLM: ARM 32 bits with Neon instruction set build target")
1078# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64)
1079# pragma message("GLM: ARM 64 bits build target")
1080# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32)
1081# pragma message("GLM: ARM 32 bits build target")
1083# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64)
1084# pragma message("GLM: MIPS 64 bits build target")
1085# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32)
1086# pragma message("GLM: MIPS 32 bits build target")
1088# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64)
1089# pragma message("GLM: PowerPC 64 bits build target")
1090# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32)
1091# pragma message("GLM: PowerPC 32 bits build target")
1093# pragma message("GLM: Unknown build target")
1097# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
1098# pragma message("GLM: QNX platform detected")
1101# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
1102# pragma message("GLM: Apple platform detected")
1103# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
1104# pragma message("GLM: WinCE platform detected")
1105# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
1106# pragma message("GLM: Windows platform detected")
1107# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
1108# pragma message("GLM: Native Client detected")
1109# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
1110# pragma message("GLM: Android platform detected")
1111# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
1112# pragma message("GLM: Linux platform detected")
1113# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
1114# pragma message("GLM: UNIX platform detected")
1115# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
1116# pragma message("GLM: platform unknown")
1118# pragma message("GLM: platform not detected")
1122# if defined GLM_FORCE_XYZW_ONLY
1123# pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.")
1127# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
1128# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.")
1129# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
1130# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.")
1132# pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.")
1136# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T
1137# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.")
1139# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.")
1142# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE
1143# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.")
1145# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.")
1148# if GLM_SILENT_WARNINGS == GLM_ENABLE
1149# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.")
1151# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.")
1154# ifdef GLM_FORCE_SINGLE_ONLY
1155# pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.")
1158# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)
1159# undef GLM_FORCE_ALIGNED_GENTYPES
1160# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.")
1161# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)
1162# undef GLM_FORCE_ALIGNED_GENTYPES
1163# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.")
1166# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)
1167# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE
1168# undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
1169# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.")
1170# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE
1171# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.")
1175# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT
1176# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.")
1178# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.")
1181# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT
1182# pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.")
1184# pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.")
int64 int64_t
64 bit signed integer type.
uint64 uint64_t
Default qualifier 64 bit unsigned integer type.