setup.hpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. /// @ref core
  2. /// @file glm/detail/setup.hpp
  3. #ifndef GLM_SETUP_INCLUDED
  4. #include <cassert>
  5. #include <cstddef>
  6. #define GLM_VERSION_MAJOR 0
  7. #define GLM_VERSION_MINOR 9
  8. #define GLM_VERSION_PATCH 9
  9. #define GLM_VERSION_REVISION 1
  10. #define GLM_VERSION 991
  11. #define GLM_VERSION_MESSAGE "GLM: version 0.9.9.1"
  12. #define GLM_SETUP_INCLUDED GLM_VERSION
  13. ///////////////////////////////////////////////////////////////////////////////////
  14. // Active states
  15. #define GLM_DISABLE 0
  16. #define GLM_ENABLE 1
  17. ///////////////////////////////////////////////////////////////////////////////////
  18. // Messages
  19. #if defined(GLM_FORCE_MESSAGES)
  20. # define GLM_MESSAGES GLM_ENABLE
  21. #else
  22. # define GLM_MESSAGES GLM_DISABLE
  23. #endif
  24. ///////////////////////////////////////////////////////////////////////////////////
  25. // Detect the platform
  26. #include "../simd/platform.h"
  27. ///////////////////////////////////////////////////////////////////////////////////
  28. // Build model
  29. #if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
  30. # define GLM_MODEL GLM_MODEL_64
  31. #elif defined(__i386__) || defined(__ppc__)
  32. # define GLM_MODEL GLM_MODEL_32
  33. #else
  34. # define GLM_MODEL GLM_MODEL_32
  35. #endif//
  36. #if !defined(GLM_MODEL) && GLM_COMPILER != 0
  37. # error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
  38. #endif//GLM_MODEL
  39. ///////////////////////////////////////////////////////////////////////////////////
  40. // C++ Version
  41. // User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A
  42. #define GLM_LANG_CXX98_FLAG (1 << 1)
  43. #define GLM_LANG_CXX03_FLAG (1 << 2)
  44. #define GLM_LANG_CXX0X_FLAG (1 << 3)
  45. #define GLM_LANG_CXX11_FLAG (1 << 4)
  46. #define GLM_LANG_CXX14_FLAG (1 << 5)
  47. #define GLM_LANG_CXX17_FLAG (1 << 6)
  48. #define GLM_LANG_CXX2A_FLAG (1 << 7)
  49. #define GLM_LANG_CXXMS_FLAG (1 << 8)
  50. #define GLM_LANG_CXXGNU_FLAG (1 << 9)
  51. #define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
  52. #define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
  53. #define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
  54. #define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
  55. #define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)
  56. #define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)
  57. #define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)
  58. #define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
  59. #define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
  60. #ifdef _MSC_EXTENSIONS
  61. # define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG
  62. #else
  63. # define GLM_LANG_EXT 0
  64. #endif
  65. #if defined(GLM_FORCE_CXX2A)
  66. # if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_FORCE_CXX2A_DISPLAYED)
  67. # define GLM_MESSAGE_FORCE_CXX2A_DISPLAYED
  68. # pragma message("GLM: Force the use of C++2a only")
  69. # endif//GLM_MESSAGES
  70. # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)
  71. # define GLM_LANG_STL11_FORCED
  72. #elif defined(GLM_FORCE_CXX17)
  73. # if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_FORCE_CXX17_DISPLAYED)
  74. # define GLM_MESSAGE_FORCE_CXX17_DISPLAYED
  75. # if (__cplusplus >= 201703L) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15_7)) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC80)) || ((GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG50))
  76. # pragma message("GLM: Force the use of C++17 only")
  77. # else
  78. # pragma message("GLM: Force the use of C++17 on a compiler that doesn't have full C++17 support")
  79. # endif
  80. # endif//GLM_MESSAGES
  81. # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
  82. # define GLM_LANG_STL11_FORCED
  83. #elif defined(GLM_FORCE_CXX14)
  84. # if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_FORCE_CXX14_DISPLAYED)
  85. # define GLM_MESSAGE_FORCE_CXX14_DISPLAYED
  86. # if (__cplusplus >= 201402L) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC50)) || ((GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG34))
  87. # pragma message("GLM: Force the use of C++14 only")
  88. # else
  89. # pragma message("GLM: Force the use of C++14 on a compiler that doesn't have full C++14 support")
  90. # endif
  91. # endif//GLM_MESSAGES
  92. # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
  93. # define GLM_LANG_STL11_FORCED
  94. #elif defined(GLM_FORCE_CXX11)
  95. # if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_FORCE_CXX11_DISPLAYED)
  96. # define GLM_MESSAGE_FORCE_CXX11_DISPLAYED
  97. # if (__cplusplus >= 201103L) || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)) || ((GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG33))
  98. # pragma message("GLM: Force the use of C++11 only")
  99. # else
  100. # pragma message("GLM: Force the use of C++11 on a compiler that doesn't have full C++11 support")
  101. # endif
  102. # endif//GLM_MESSAGES
  103. # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
  104. # define GLM_LANG_STL11_FORCED
  105. #elif defined(GLM_FORCE_CXX03)
  106. # define GLM_LANG GLM_LANG_CXX03
  107. #elif defined(GLM_FORCE_CXX98)
  108. # define GLM_LANG GLM_LANG_CXX98
  109. #else
  110. # if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG)
  111. # if GLM_COMPILER >= GLM_COMPILER_VC15_7
  112. # define GLM_LANG_PLATFORM _MSVC_LANG
  113. # elif GLM_COMPILER >= GLM_COMPILER_VC15
  114. # if _MSVC_LANG > 201402L
  115. # define GLM_LANG_PLATFORM 201402L
  116. # else
  117. # define GLM_LANG_PLATFORM _MSVC_LANG
  118. # endif
  119. # else
  120. # define GLM_LANG_PLATFORM 0
  121. # endif
  122. # else
  123. # define GLM_LANG_PLATFORM 0
  124. # endif
  125. # if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L
  126. # define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)
  127. # elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L
  128. # define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)
  129. # elif __cplusplus == 201402L || GLM_LANG_PLATFORM == 201402L
  130. # define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)
  131. # elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L
  132. # define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)
  133. # elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)
  134. # define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)
  135. # elif __cplusplus == 199711L
  136. # define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)
  137. # else
  138. # define GLM_LANG (0 | GLM_LANG_EXT)
  139. # endif
  140. #endif
  141. ///////////////////////////////////////////////////////////////////////////////////
  142. // Has of C++ features
  143. // http://clang.llvm.org/cxx_status.html
  144. // http://gcc.gnu.org/projects/cxx0x.html
  145. // http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
  146. // Android has multiple STLs but C++11 STL detection doesn't always work #284 #564
  147. #if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)
  148. # define GLM_HAS_CXX11_STL 0
  149. #elif GLM_COMPILER & GLM_COMPILER_CLANG
  150. # if (defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)
  151. # define GLM_HAS_CXX11_STL 1
  152. # else
  153. # define GLM_HAS_CXX11_STL 0
  154. # endif
  155. #else
  156. # define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  157. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
  158. ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))
  159. #endif
  160. // N1720
  161. #if GLM_COMPILER & GLM_COMPILER_CLANG
  162. # define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
  163. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  164. # define GLM_HAS_STATIC_ASSERT 1
  165. #else
  166. # define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  167. ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
  168. ((GLM_COMPILER & GLM_COMPILER_VC))))
  169. #endif
  170. // N1988
  171. #if GLM_LANG & GLM_LANG_CXX11_FLAG
  172. # define GLM_HAS_EXTENDED_INTEGER_TYPE 1
  173. #else
  174. # define GLM_HAS_EXTENDED_INTEGER_TYPE (\
  175. ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \
  176. ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
  177. ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)))
  178. #endif
  179. // N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
  180. #if GLM_COMPILER & GLM_COMPILER_CLANG
  181. # define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
  182. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  183. # define GLM_HAS_INITIALIZER_LISTS 1
  184. #else
  185. # define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  186. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
  187. ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
  188. ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75))))
  189. #endif
  190. // N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
  191. #if GLM_COMPILER & GLM_COMPILER_CLANG
  192. # define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
  193. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  194. # define GLM_HAS_UNRESTRICTED_UNIONS 1
  195. #else
  196. # define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  197. (GLM_COMPILER & GLM_COMPILER_VC) || \
  198. ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75)))
  199. #endif
  200. // N2346
  201. #if GLM_COMPILER & GLM_COMPILER_CLANG
  202. # define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
  203. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  204. # define GLM_HAS_DEFAULTED_FUNCTIONS 1
  205. #else
  206. # define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  207. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
  208. ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
  209. (GLM_COMPILER & GLM_COMPILER_CUDA)))
  210. #endif
  211. // N2118
  212. #if GLM_COMPILER & GLM_COMPILER_CLANG
  213. # define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
  214. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  215. # define GLM_HAS_RVALUE_REFERENCES 1
  216. #else
  217. # define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  218. ((GLM_COMPILER & GLM_COMPILER_VC)) || \
  219. ((GLM_COMPILER & GLM_COMPILER_CUDA))))
  220. #endif
  221. // N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
  222. #if GLM_COMPILER & GLM_COMPILER_CLANG
  223. # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
  224. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  225. # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
  226. #else
  227. # define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  228. ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
  229. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
  230. ((GLM_COMPILER & GLM_COMPILER_CUDA))))
  231. #endif
  232. // N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
  233. #if GLM_COMPILER & GLM_COMPILER_CLANG
  234. # define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
  235. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  236. # define GLM_HAS_TEMPLATE_ALIASES 1
  237. #else
  238. # define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  239. ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
  240. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
  241. ((GLM_COMPILER & GLM_COMPILER_CUDA))))
  242. #endif
  243. // N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
  244. #if GLM_COMPILER & GLM_COMPILER_CLANG
  245. # define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
  246. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  247. # define GLM_HAS_RANGE_FOR 1
  248. #else
  249. # define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  250. ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
  251. ((GLM_COMPILER & GLM_COMPILER_VC)) || \
  252. ((GLM_COMPILER & GLM_COMPILER_CUDA))))
  253. #endif
  254. // N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
  255. #if GLM_COMPILER & GLM_COMPILER_CLANG
  256. # define GLM_HAS_ALIGNOF __has_feature(c_alignof)
  257. #elif GLM_LANG & GLM_LANG_CXX11_FLAG
  258. # define GLM_HAS_ALIGNOF 1
  259. #else
  260. # define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  261. ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
  262. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \
  263. ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70))))
  264. #endif
  265. // N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
  266. // N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html
  267. #if (GLM_COMPILER & GLM_COMPILER_CLANG) && !(GLM_ARCH & GLM_ARCH_SIMD_BIT)
  268. # define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)
  269. #elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && !(GLM_ARCH & GLM_ARCH_SIMD_BIT)
  270. # define GLM_HAS_CONSTEXPR 1
  271. #else
  272. # define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && !(GLM_ARCH & GLM_ARCH_SIMD_BIT) && GLM_HAS_INITIALIZER_LISTS && (\
  273. ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \
  274. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15))))
  275. #endif
  276. #if GLM_HAS_CONSTEXPR
  277. # define GLM_CONSTEXPR constexpr
  278. #else
  279. # define GLM_CONSTEXPR
  280. #endif
  281. //
  282. #if GLM_LANG & GLM_LANG_CXX11_FLAG
  283. # define GLM_HAS_ASSIGNABLE 1
  284. #else
  285. # define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  286. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \
  287. ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))
  288. #endif
  289. //
  290. #define GLM_HAS_TRIVIAL_QUERIES 0
  291. //
  292. #if GLM_LANG & GLM_LANG_CXX11_FLAG
  293. # define GLM_HAS_MAKE_SIGNED 1
  294. #else
  295. # define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
  296. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \
  297. ((GLM_COMPILER & GLM_COMPILER_CUDA))))
  298. #endif
  299. #if defined(GLM_FORCE_PURE)
  300. # define GLM_HAS_BITSCAN_WINDOWS 0
  301. #else
  302. # define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
  303. ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \
  304. ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))
  305. #endif
  306. ///////////////////////////////////////////////////////////////////////////////////
  307. // OpenMP
  308. #ifdef _OPENMP
  309. # if GLM_COMPILER & GLM_COMPILER_GCC
  310. # if GLM_COMPILER >= GLM_COMPILER_GCC61
  311. # define GLM_HAS_OPENMP 45
  312. # elif GLM_COMPILER >= GLM_COMPILER_GCC49
  313. # define GLM_HAS_OPENMP 40
  314. # elif GLM_COMPILER >= GLM_COMPILER_GCC47
  315. # define GLM_HAS_OPENMP 31
  316. # else
  317. # define GLM_HAS_OPENMP 0
  318. # endif
  319. # elif GLM_COMPILER & GLM_COMPILER_CLANG
  320. # if GLM_COMPILER >= GLM_COMPILER_CLANG38
  321. # define GLM_HAS_OPENMP 31
  322. # else
  323. # define GLM_HAS_OPENMP 0
  324. # endif
  325. # elif GLM_COMPILER & GLM_COMPILER_VC
  326. # define GLM_HAS_OPENMP 20
  327. # elif GLM_COMPILER & GLM_COMPILER_INTEL
  328. # if GLM_COMPILER >= GLM_COMPILER_INTEL16
  329. # define GLM_HAS_OPENMP 40
  330. # else
  331. # define GLM_HAS_OPENMP 0
  332. # endif
  333. # else
  334. # define GLM_HAS_OPENMP 0
  335. # endif
  336. #else
  337. # define GLM_HAS_OPENMP 0
  338. #endif
  339. ///////////////////////////////////////////////////////////////////////////////////
  340. // nullptr
  341. #if GLM_LANG & GLM_LANG_CXX0X_FLAG
  342. # define GLM_USE_NULLPTR GLM_ENABLE
  343. #else
  344. # define GLM_USE_NULLPTR GLM_DISABLE
  345. #endif
  346. #if GLM_USE_NULLPTR == GLM_ENABLE
  347. # define GLM_NULLPTR nullptr
  348. #else
  349. # define GLM_NULLPTR 0
  350. #endif
  351. ///////////////////////////////////////////////////////////////////////////////////
  352. // Static assert
  353. #if GLM_HAS_STATIC_ASSERT
  354. # define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
  355. #elif GLM_COMPILER & GLM_COMPILER_VC
  356. # define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
  357. #else
  358. # define GLM_STATIC_ASSERT(x, message)
  359. # define GLM_STATIC_ASSERT_NULL
  360. #endif//GLM_LANG
  361. ///////////////////////////////////////////////////////////////////////////////////
  362. // Qualifiers
  363. #if GLM_COMPILER & GLM_COMPILER_CUDA
  364. # define GLM_CUDA_FUNC_DEF __device__ __host__
  365. # define GLM_CUDA_FUNC_DECL __device__ __host__
  366. #else
  367. # define GLM_CUDA_FUNC_DEF
  368. # define GLM_CUDA_FUNC_DECL
  369. #endif
  370. #if defined(GLM_FORCE_INLINE)
  371. # if GLM_COMPILER & GLM_COMPILER_VC
  372. # define GLM_INLINE __forceinline
  373. # define GLM_NEVER_INLINE __declspec((noinline))
  374. # elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
  375. # define GLM_INLINE inline __attribute__((__always_inline__))
  376. # define GLM_NEVER_INLINE __attribute__((__noinline__))
  377. # elif GLM_COMPILER & GLM_COMPILER_CUDA
  378. # define GLM_INLINE __forceinline__
  379. # define GLM_NEVER_INLINE __noinline__
  380. # else
  381. # define GLM_INLINE inline
  382. # define GLM_NEVER_INLINE
  383. # endif//GLM_COMPILER
  384. #else
  385. # define GLM_INLINE inline
  386. # define GLM_NEVER_INLINE
  387. #endif//defined(GLM_FORCE_INLINE)
  388. #define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
  389. #define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
  390. ///////////////////////////////////////////////////////////////////////////////////
  391. // Swizzle operators
  392. // User defines: GLM_FORCE_SWIZZLE
  393. #define GLM_SWIZZLE_OPERATOR 1
  394. #define GLM_SWIZZLE_FUNCTION 2
  395. #if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)
  396. # define GLM_SWIZZLE GLM_SWIZZLE_OPERATOR
  397. #elif defined(GLM_FORCE_SWIZZLE)
  398. # define GLM_SWIZZLE GLM_SWIZZLE_FUNCTION
  399. #else
  400. # define GLM_SWIZZLE GLM_DISABLE
  401. #endif
  402. ///////////////////////////////////////////////////////////////////////////////////
  403. // Allows using not basic types as genType
  404. // #define GLM_FORCE_UNRESTRICTED_GENTYPE
  405. #ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
  406. # define GLM_UNRESTRICTED_GENTYPE GLM_ENABLE
  407. #else
  408. # define GLM_UNRESTRICTED_GENTYPE GLM_DISABLE
  409. #endif
  410. ///////////////////////////////////////////////////////////////////////////////////
  411. // Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM
  412. // to use a clip space between 0 to 1.
  413. #define GLM_DEPTH_ZERO_TO_ONE 0x00000001
  414. #define GLM_DEPTH_NEGATIVE_ONE_TO_ONE 0x00000002
  415. #ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE
  416. # define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_ZERO_TO_ONE
  417. #else
  418. # define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_NEGATIVE_ONE_TO_ONE
  419. #endif
  420. ///////////////////////////////////////////////////////////////////////////////////
  421. // Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM
  422. // to use left handed coordinate system by default.
  423. #define GLM_LEFT_HANDED 0x00000001 // For DirectX, Metal, Vulkan
  424. #define GLM_RIGHT_HANDED 0x00000002 // For OpenGL, default in GLM
  425. #ifdef GLM_FORCE_LEFT_HANDED
  426. # define GLM_COORDINATE_SYSTEM GLM_LEFT_HANDED
  427. #else
  428. # define GLM_COORDINATE_SYSTEM GLM_RIGHT_HANDED
  429. #endif
  430. ///////////////////////////////////////////////////////////////////////////////////
  431. // Qualifiers
  432. #if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
  433. # define GLM_DEPRECATED __declspec(deprecated)
  434. # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
  435. #elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)
  436. # define GLM_DEPRECATED __attribute__((__deprecated__))
  437. # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
  438. #elif GLM_COMPILER & GLM_COMPILER_CUDA
  439. # define GLM_DEPRECATED
  440. # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)
  441. #else
  442. # define GLM_DEPRECATED
  443. # define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
  444. #endif
  445. ///////////////////////////////////////////////////////////////////////////////////
  446. #ifdef GLM_FORCE_EXPLICIT_CTOR
  447. # define GLM_EXPLICIT explicit
  448. #else
  449. # define GLM_EXPLICIT
  450. #endif
  451. ///////////////////////////////////////////////////////////////////////////////////
  452. // Length type: all length functions returns a length_t type.
  453. // When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise
  454. // length_t is a typedef of int like GLSL defines it.
  455. // User define: GLM_FORCE_SIZE_T_LENGTH
  456. namespace glm
  457. {
  458. using std::size_t;
  459. # if defined(GLM_FORCE_SIZE_T_LENGTH)
  460. typedef size_t length_t;
  461. # else
  462. typedef int length_t;
  463. # endif
  464. }//namespace glm
  465. ///////////////////////////////////////////////////////////////////////////////////
  466. // countof
  467. #if GLM_HAS_CONSTEXPR
  468. namespace glm
  469. {
  470. template<typename T, std::size_t N>
  471. constexpr std::size_t countof(T const (&)[N])
  472. {
  473. return N;
  474. }
  475. }//namespace glm
  476. # define GLM_COUNTOF(arr) glm::countof(arr)
  477. #elif defined(_MSC_VER)
  478. # define GLM_COUNTOF(arr) _countof(arr)
  479. #else
  480. # define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
  481. #endif
  482. ///////////////////////////////////////////////////////////////////////////////////
  483. // Configure the use of defaulted initialized types
  484. #define GLM_CTOR_INITIALIZER_LIST (1 << 1)
  485. #define GLM_CTOR_INITIALISATION (1 << 2)
  486. #if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS
  487. # define GLM_USE_CTOR_INIT GLM_CTOR_INITIALIZER_LIST
  488. #elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS
  489. # define GLM_USE_CTOR_INIT GLM_CTOR_INITIALISATION
  490. #else
  491. # define GLM_USE_CTOR_INIT GLM_DISABLE
  492. #endif
  493. ///////////////////////////////////////////////////////////////////////////////////
  494. // Configure the use of defaulted function
  495. #if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_USE_CTOR_INIT == GLM_DISABLE
  496. # define GLM_USE_DEFAULTED_FUNCTIONS GLM_ENABLE
  497. # define GLM_DEFAULT = default
  498. #else
  499. # define GLM_USE_DEFAULTED_FUNCTIONS GLM_DISABLE
  500. # define GLM_DEFAULT
  501. #endif
  502. ///////////////////////////////////////////////////////////////////////////////////
  503. // Configure the use of aligned gentypes
  504. #if defined(GLM_FORCE_ALIGNED_GENTYPES) && GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG)
  505. # define GLM_USE_ALIGNED_GENTYPES GLM_ENABLE
  506. #else
  507. # define GLM_USE_ALIGNED_GENTYPES GLM_DISABLE
  508. #endif
  509. ///////////////////////////////////////////////////////////////////////////////////
  510. // Use SIMD instruction sets
  511. #if (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)
  512. #define GLM_USE_SIMD GLM_ENABLE
  513. #else
  514. #define GLM_USE_SIMD GLM_DISABLE
  515. #endif
  516. ///////////////////////////////////////////////////////////////////////////////////
  517. // Configure the use of anonymous structure as implementation detail
  518. #if ((GLM_USE_SIMD == GLM_ENABLE) || (GLM_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_USE_ALIGNED_GENTYPES == GLM_ENABLE))
  519. # define GLM_USE_ANONYMOUS_STRUCT GLM_ENABLE
  520. #else
  521. # define GLM_USE_ANONYMOUS_STRUCT GLM_DISABLE
  522. #endif
  523. ///////////////////////////////////////////////////////////////////////////////////
  524. // Check inclusions of different versions of GLM
  525. #elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION))
  526. # error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error."
  527. #elif GLM_SETUP_INCLUDED == GLM_VERSION
  528. ///////////////////////////////////////////////////////////////////////////////////
  529. // Messages
  530. #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED)
  531. # define GLM_MESSAGE_DISPLAYED
  532. // Report GLM version
  533. # pragma message (GLM_VERSION_MESSAGE)
  534. // Report C++ language
  535. # if GLM_LANG & GLM_LANG_CXX2A_FLAG
  536. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  537. # pragma message("GLM: C++ 2A with extensions")
  538. # else
  539. # pragma message("GLM: C++ 2A")
  540. # endif
  541. # elif GLM_LANG & GLM_LANG_CXX17_FLAG
  542. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  543. # pragma message("GLM: C++ 17 with extensions")
  544. # else
  545. # pragma message("GLM: C++ 17")
  546. # endif
  547. # elif GLM_LANG & GLM_LANG_CXX14_FLAG
  548. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  549. # pragma message("GLM: C++ 14 with extensions")
  550. # else
  551. # pragma message("GLM: C++ 14")
  552. # endif
  553. # elif GLM_LANG & GLM_LANG_CXX11_FLAG
  554. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  555. # pragma message("GLM: C++ 11 with extensions")
  556. # else
  557. # pragma message("GLM: C++ 11")
  558. # endif
  559. # elif GLM_LANG & GLM_LANG_CXX0X_FLAG
  560. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  561. # pragma message("GLM: C++ 0x with extensions")
  562. # else
  563. # pragma message("GLM: C++ 0x")
  564. # endif
  565. # elif GLM_LANG & GLM_LANG_CXX03_FLAG
  566. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  567. # pragma message("GLM: C++ 03 with extensions")
  568. # else
  569. # pragma message("GLM: C++ 03")
  570. # endif
  571. # elif GLM_LANG & GLM_LANG_CXX98_FLAG
  572. # if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
  573. # pragma message("GLM: C++ 98 with extensions")
  574. # else
  575. # pragma message("GLM: C++ 98")
  576. # endif
  577. # else
  578. # pragma message("GLM: C++ language undetected")
  579. # endif//GLM_LANG
  580. // Report compiler detection
  581. # if GLM_COMPILER & GLM_COMPILER_CUDA
  582. # pragma message("GLM: CUDA compiler detected")
  583. # elif GLM_COMPILER & GLM_COMPILER_VC
  584. # pragma message("GLM: Visual C++ compiler detected")
  585. # elif GLM_COMPILER & GLM_COMPILER_CLANG
  586. # pragma message("GLM: Clang compiler detected")
  587. # elif GLM_COMPILER & GLM_COMPILER_INTEL
  588. # pragma message("GLM: Intel Compiler detected")
  589. # elif GLM_COMPILER & GLM_COMPILER_GCC
  590. # pragma message("GLM: GCC compiler detected")
  591. # else
  592. # pragma message("GLM: Compiler not detected")
  593. # endif
  594. // Report build target
  595. # if GLM_ARCH & GLM_ARCH_AVX2_BIT
  596. # if GLM_MODEL == GLM_MODEL_64
  597. # pragma message("GLM: x86 64 bits with AVX2 instruction set build target")
  598. # else
  599. # pragma message("GLM: x86 32 bits with AVX2 instruction set build target")
  600. # endif
  601. # elif GLM_ARCH & GLM_ARCH_AVX_BIT
  602. # if GLM_MODEL == GLM_MODEL_64
  603. # pragma message("GLM: x86 64 bits with AVX instruction set build target")
  604. # else
  605. # pragma message("GLM: x86 32 bits with AVX instruction set build target")
  606. # endif
  607. # elif GLM_ARCH & GLM_ARCH_SSE42_BIT
  608. # if GLM_MODEL == GLM_MODEL_64
  609. # pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target")
  610. # else
  611. # pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target")
  612. # endif
  613. # elif GLM_ARCH & GLM_ARCH_SSE41_BIT
  614. # if GLM_MODEL == GLM_MODEL_64
  615. # pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target")
  616. # else
  617. # pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target")
  618. # endif
  619. # elif GLM_ARCH & GLM_ARCH_SSSE3_BIT
  620. # if GLM_MODEL == GLM_MODEL_64
  621. # pragma message("GLM: x86 64 bits with SSSE3 instruction set build target")
  622. # else
  623. # pragma message("GLM: x86 32 bits with SSSE3 instruction set build target")
  624. # endif
  625. # elif GLM_ARCH & GLM_ARCH_SSE3_BIT
  626. # if GLM_MODEL == GLM_MODEL_64
  627. # pragma message("GLM: x86 64 bits with SSE3 instruction set build target")
  628. # else
  629. # pragma message("GLM: x86 32 bits with SSE3 instruction set build target")
  630. # endif
  631. # elif GLM_ARCH & GLM_ARCH_SSE2_BIT
  632. # if GLM_MODEL == GLM_MODEL_64
  633. # pragma message("GLM: x86 64 bits with SSE2 instruction set build target")
  634. # else
  635. # pragma message("GLM: x86 32 bits with SSE2 instruction set build target")
  636. # endif
  637. # elif GLM_ARCH & GLM_ARCH_X86_BIT
  638. # if GLM_MODEL == GLM_MODEL_64
  639. # pragma message("GLM: x86 64 bits build target")
  640. # else
  641. # pragma message("GLM: x86 32 bits build target")
  642. # endif
  643. # elif GLM_ARCH & GLM_ARCH_NEON_BIT
  644. # if GLM_MODEL == GLM_MODEL_64
  645. # pragma message("GLM: ARM 64 bits with Neon instruction set build target")
  646. # else
  647. # pragma message("GLM: ARM 32 bits with Neon instruction set build target")
  648. # endif
  649. # elif GLM_ARCH & GLM_ARCH_ARM_BIT
  650. # if GLM_MODEL == GLM_MODEL_64
  651. # pragma message("GLM: ARM 64 bits build target")
  652. # else
  653. # pragma message("GLM: ARM 32 bits build target")
  654. # endif
  655. # elif GLM_ARCH & GLM_ARCH_MIPS_BIT
  656. # if GLM_MODEL == GLM_MODEL_64
  657. # pragma message("GLM: MIPS 64 bits build target")
  658. # else
  659. # pragma message("GLM: MIPS 32 bits build target")
  660. # endif
  661. # elif GLM_ARCH & GLM_ARCH_PPC_BIT
  662. # if GLM_MODEL == GLM_MODEL_64
  663. # pragma message("GLM: PowerPC 64 bits build target")
  664. # else
  665. # pragma message("GLM: PowerPC 32 bits build target")
  666. # endif
  667. # else
  668. # pragma message("GLM: Unknown build target")
  669. # endif//GLM_ARCH
  670. // Report platform name
  671. # if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
  672. # pragma message("GLM: QNX platform detected")
  673. //# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
  674. //# pragma message("GLM: iOS platform detected")
  675. # elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
  676. # pragma message("GLM: Apple platform detected")
  677. # elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
  678. # pragma message("GLM: WinCE platform detected")
  679. # elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
  680. # pragma message("GLM: Windows platform detected")
  681. # elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
  682. # pragma message("GLM: Native Client detected")
  683. # elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
  684. # pragma message("GLM: Android platform detected")
  685. # elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
  686. # pragma message("GLM: Linux platform detected")
  687. # elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
  688. # pragma message("GLM: UNIX platform detected")
  689. # elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
  690. # pragma message("GLM: platform unknown")
  691. # else
  692. # pragma message("GLM: platform not detected")
  693. # endif
  694. // Report swizzle operator support
  695. # if GLM_SWIZZLE == GLM_SWIZZLE_OPERATOR
  696. # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled")
  697. # elif GLM_SWIZZLE == GLM_SWIZZLE_FUNCTION
  698. # pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.")
  699. # else
  700. # pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.")
  701. # endif
  702. // Report .length() type
  703. # if defined GLM_FORCE_SIZE_T_LENGTH
  704. # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t instead of int.")
  705. # else
  706. # pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following the GLSL specification. Define GLM_FORCE_SIZE_T_LENGTH to make glm::length_t, a typedef of std::size_t.")
  707. # endif
  708. # ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
  709. # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL specification restrictions on valid function genTypes.")
  710. # else
  711. # pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL specification on valid function genTypes.")
  712. # endif
  713. # ifdef GLM_FORCE_SINGLE_ONLY
  714. # pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types")
  715. # endif
  716. # if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
  717. # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.")
  718. # else
  719. # pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.")
  720. # endif
  721. # if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
  722. # pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.")
  723. # else
  724. # pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.")
  725. # endif
  726. #endif//GLM_MESSAGES
  727. #endif//GLM_SETUP_INCLUDED