diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-05-07 06:02:29 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-05-07 06:02:29 -0400 |
commit | 6a45579dbbf991c0e12ce59958e3b533d19fc9d4 (patch) | |
tree | 83ad11d63c0a1d1c89b9469455ecbda4531fe6ac /glm-master/glm/gtx/range.hpp | |
parent | cb868acadcae4e3f497ecdabeca507f3e73e01c7 (diff) |
rotating skyboxgit add -A
Diffstat (limited to 'glm-master/glm/gtx/range.hpp')
-rw-r--r-- | glm-master/glm/gtx/range.hpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/glm-master/glm/gtx/range.hpp b/glm-master/glm/gtx/range.hpp new file mode 100644 index 0000000..93bcb9a --- /dev/null +++ b/glm-master/glm/gtx/range.hpp @@ -0,0 +1,98 @@ +/// @ref gtx_range +/// @file glm/gtx/range.hpp +/// @author Joshua Moerman +/// +/// @defgroup gtx_range GLM_GTX_range +/// @ingroup gtx +/// +/// Include <glm/gtx/range.hpp> to use the features of this extension. +/// +/// Defines begin and end for vectors and matrices. Useful for range-based for loop. +/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). + +#pragma once + +// Dependencies +#include "../detail/setup.hpp" + +#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) +# ifndef GLM_ENABLE_EXPERIMENTAL +# pragma message("GLM: GLM_GTX_range 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_range extension included") +# endif +#endif + +#include "../gtc/type_ptr.hpp" +#include "../gtc/vec1.hpp" + +namespace glm +{ + /// @addtogroup gtx_range + /// @{ + +# if GLM_COMPILER & GLM_COMPILER_VC +# pragma warning(push) +# pragma warning(disable : 4100) // unreferenced formal parameter +# endif + + template<typename T, qualifier Q> + inline length_t components(vec<1, T, Q> const& v) + { + return v.length(); + } + + template<typename T, qualifier Q> + inline length_t components(vec<2, T, Q> const& v) + { + return v.length(); + } + + template<typename T, qualifier Q> + inline length_t components(vec<3, T, Q> const& v) + { + return v.length(); + } + + template<typename T, qualifier Q> + inline length_t components(vec<4, T, Q> const& v) + { + return v.length(); + } + + template<typename genType> + inline length_t components(genType const& m) + { + return m.length() * m[0].length(); + } + + template<typename genType> + inline typename genType::value_type const * begin(genType const& v) + { + return value_ptr(v); + } + + template<typename genType> + inline typename genType::value_type const * end(genType const& v) + { + return begin(v) + components(v); + } + + template<typename genType> + inline typename genType::value_type * begin(genType& v) + { + return value_ptr(v); + } + + template<typename genType> + inline typename genType::value_type * end(genType& v) + { + return begin(v) + components(v); + } + +# if GLM_COMPILER & GLM_COMPILER_VC +# pragma warning(pop) +# endif + + /// @} +}//namespace glm |